ddy-process-pc-vue2 1.0.1-rc.2.3 → 1.0.1-rc.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/package.json +1 -1
  2. package/vue2/index.esm.js +1344 -204
  3. package/vue2/index.umd.js +1344 -204
package/vue2/index.esm.js CHANGED
@@ -674,7 +674,7 @@ var api$1 = {
674
674
  */
675
675
  getOutgoingProcessNode(taskId, processNodeId) {
676
676
  let ajaxObj = {
677
- url: proxyStr + "/repository/getOutgoingProcessNode",
677
+ url: proxyStrV2 + "/tis/getOutgoingProcessNode",
678
678
  param: {
679
679
  taskId,
680
680
  processNodeId
@@ -2690,6 +2690,167 @@ __vue_render__$h._withStripped = true;
2690
2690
  //
2691
2691
  //
2692
2692
  //
2693
+ //
2694
+ //
2695
+ //
2696
+ //
2697
+ //
2698
+ //
2699
+ //
2700
+ //
2701
+ //
2702
+ //
2703
+ //
2704
+ //
2705
+ //
2706
+ //
2707
+ //
2708
+ //
2709
+ //
2710
+ //
2711
+ //
2712
+ //
2713
+ //
2714
+ //
2715
+ //
2716
+ //
2717
+ //
2718
+ //
2719
+ //
2720
+ //
2721
+ //
2722
+ //
2723
+ //
2724
+ //
2725
+ //
2726
+ //
2727
+ //
2728
+ //
2729
+ //
2730
+ //
2731
+ //
2732
+ //
2733
+ //
2734
+ //
2735
+ //
2736
+ //
2737
+ //
2738
+ //
2739
+ //
2740
+ //
2741
+ //
2742
+ //
2743
+ //
2744
+ //
2745
+ //
2746
+ //
2747
+ //
2748
+ //
2749
+ //
2750
+ //
2751
+ //
2752
+ //
2753
+ //
2754
+ //
2755
+ //
2756
+ //
2757
+ //
2758
+ //
2759
+ //
2760
+ //
2761
+ //
2762
+ //
2763
+ //
2764
+ //
2765
+ //
2766
+ //
2767
+ //
2768
+ //
2769
+ //
2770
+ //
2771
+ //
2772
+ //
2773
+ //
2774
+ //
2775
+ //
2776
+ //
2777
+ //
2778
+ //
2779
+ //
2780
+ //
2781
+ //
2782
+ //
2783
+ //
2784
+ //
2785
+ //
2786
+ //
2787
+ //
2788
+ //
2789
+ //
2790
+ //
2791
+ //
2792
+ //
2793
+ //
2794
+ //
2795
+ //
2796
+ //
2797
+ //
2798
+ //
2799
+ //
2800
+ //
2801
+ //
2802
+ //
2803
+ //
2804
+ //
2805
+ //
2806
+ //
2807
+ //
2808
+ //
2809
+ //
2810
+ //
2811
+ //
2812
+ //
2813
+ //
2814
+ //
2815
+ //
2816
+ //
2817
+ //
2818
+ //
2819
+ //
2820
+ //
2821
+ //
2822
+ //
2823
+ //
2824
+ //
2825
+ //
2826
+ //
2827
+ //
2828
+ //
2829
+ //
2830
+ //
2831
+ //
2832
+ //
2833
+ //
2834
+ //
2835
+ //
2836
+ //
2837
+ //
2838
+ //
2839
+ //
2840
+ //
2841
+ //
2842
+ //
2843
+ //
2844
+ //
2845
+ //
2846
+ //
2847
+ //
2848
+ //
2849
+ //
2850
+ //
2851
+ //
2852
+ //
2853
+ //
2693
2854
 
2694
2855
 
2695
2856
  var script$g = {
@@ -2730,8 +2891,10 @@ var script$g = {
2730
2891
  },
2731
2892
  computed: {
2732
2893
  checkModelList() {
2733
- let arr = this.processNodeObj.childNode.filter((o) =>
2734
- this.checkList.includes(o.incomingConditionItemList[0].compareValue)
2894
+ let arr = this.processNodeObj.branches.filter((o) =>
2895
+ {
2896
+ return this.checkList.includes(o.incomingConditionItemList[0].compareValue)
2897
+ }
2735
2898
  );
2736
2899
 
2737
2900
  this.resultList = arr || [];
@@ -2742,6 +2905,10 @@ var script$g = {
2742
2905
  processNode: {
2743
2906
  handler(newVal, oldVal) {
2744
2907
  // 如果是长度为1,固定
2908
+ console.log(newVal, 'processNodeObj');
2909
+ if (newVal.nodeType == 'userTask' && newVal.setPersonnel && newVal.assignees && newVal.assignees.length > 0) {
2910
+ this.targetUserId = newVal.assignees.map(i => i.id);
2911
+ }
2745
2912
  if (newVal.userList && newVal.userList.length == 1) {
2746
2913
  this.targetUserId = newVal.userList[0].userId;
2747
2914
  }
@@ -2840,19 +3007,111 @@ var script$g = {
2840
3007
  let flag = true;
2841
3008
  let val = { multiNodeParticipant: {}, vars: {} };
2842
3009
  if (
2843
- !this.processNodeObj.type ||
3010
+ (!this.processNodeObj.type ||
2844
3011
  this.processNodeObj.type == this.Enum.ProcessNodeType.用户任务 ||
2845
- this.processNodeObj.type == ProcessNodeType.用户节点
3012
+ this.processNodeObj.type == ProcessNodeType.用户节点)
3013
+
2846
3014
  ) {
3015
+
3016
+ /**
3017
+ * &&
3018
+ (
3019
+ this.processNodeObj.nodeType != 'exclusiveGateway'
3020
+ ||
3021
+ this.processNodeObj.nodeType == 'exclusiveGateway' && this.processNodeObj.branches.length == 0
3022
+ )
3023
+ */
3024
+ // exclusiveGateway 节点
3025
+ console.log(this.processNodeObj, 'this.processNodeObj 第一个判断');
3026
+ if (this.processNodeObj.nodeType == 'exclusiveGateway') {
3027
+ // 进来这里
3028
+ for (let key in this.userTaskListData) {
3029
+ let o = this.userTaskListData[key];
3030
+ let refCom = this.$refs[o];
3031
+
3032
+ refCom = Array.isArray(refCom) ? refCom[0] : refCom;
3033
+ if (refCom) {
3034
+ let res = refCom.getValue();
3035
+ if (!res) {
3036
+ flag = false;
3037
+ } else {
3038
+ if (this.radioModel && this.radioModel.nodeInfoDTO && this.radioModel.nodeInfoDTO.id) {
3039
+ if (
3040
+ this.radioModel.nodeInfoDTO.incomingConditionItemList &&
3041
+ this.radioModel.nodeInfoDTO.incomingConditionItemList.length > 0
3042
+ )
3043
+ val.vars[
3044
+ this.radioModel.nodeInfoDTO.incomingConditionItemList[0].itemName
3045
+ ] =
3046
+ this.radioModel.nodeInfoDTO.incomingConditionItemList[0].compareValue;
3047
+ }
3048
+ val.multiNodeParticipant = {
3049
+ ...val.multiNodeParticipant,
3050
+ ...res.multiNodeParticipant,
3051
+ };
3052
+ val.vars = { ...val.vars, ...res.vars };
3053
+ }
3054
+ }
3055
+ }
3056
+
3057
+ }
3058
+ else if (this.processNodeObj.nodeType == 'inclusiveGateway') {
3059
+ // 进来这里
3060
+ if (this.resultList && this.resultList.length > 0) {
3061
+
3062
+ this.resultList.forEach(rlItem => {
3063
+ const o = this.userTaskListData[rlItem.nodeInfoDTO.id];
3064
+ let refCom = this.$refs[o];
3065
+
3066
+ refCom = Array.isArray(refCom) ? refCom[0] : refCom;
3067
+ if (refCom) {
3068
+ let res = refCom.getValue();
3069
+ if (!res) {
3070
+ flag = false;
3071
+ } else {
3072
+ if (rlItem.nodeInfoDTO.incomingConditionItemList.length !== 0) {
3073
+ rlItem.nodeInfoDTO.incomingConditionItemList.forEach((item) => {
3074
+ if (item.itemName) {
3075
+ val.vars[item.itemName] = item.compareValue;
3076
+ }
3077
+ });
3078
+ }
3079
+ val.multiNodeParticipant = {
3080
+ ...val.multiNodeParticipant,
3081
+ ...res.multiNodeParticipant,
3082
+ };
3083
+ val.vars = { ...val.vars, ...res.vars };
3084
+ }
3085
+ }
3086
+ });
3087
+
3088
+ } else {
3089
+ console.log(this.processNodeObj, 'this.processNodeObj.nodeInfoDTO 判断是否是多分支');
3090
+ // 判断是否是多分支
3091
+ if (this.processNodeObj && this.processNodeObj.nodeType == 'inclusiveGateway') {
3092
+ Message.warning(`请选择下一节点`);
3093
+ } else {
3094
+ this.processNodeObj.nodeInfoDTO.name && Message.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} `);
3095
+ }
3096
+ return false;
3097
+ }
3098
+ }
2847
3099
  // 新流程需要进入这里
2848
- if (!this.processNodeObj.assignee || !Array.isArray(this.processNodeObj.assignee) || !this.processNodeObj.setPersonnel || this.isOption(this.processNodeObj.humanPerformerName)) {
3100
+ else if (!this.processNodeObj.assignee || !Array.isArray(this.processNodeObj.assignee) || !this.processNodeObj.setPersonnel || this.isOption(this.processNodeObj.humanPerformerName)
3101
+ ||
3102
+ (this.processNodeObj.nodeInfoDTO && (!this.processNodeObj.nodeInfoDTO.assignee || !Array.isArray(this.processNodeObj.nodeInfoDTO.assignee) || !this.processNodeObj.nodeInfoDTO.setPersonnel || this.isOption(this.processNodeObj.nodeInfoDTO.humanPerformerName)))
3103
+ ) {
2849
3104
  if (this.targetUserId && this.targetUserId.length > 0) {
2850
3105
  val.multiNodeParticipant = {};
2851
- val.multiNodeParticipant[this.processNodeObj.id] =
3106
+ val.multiNodeParticipant[this.processNode.nodeInfoDTO ? this.processNodeObj.nodeInfoDTO.id : this.processNodeObj.id] =
2852
3107
  Array.isArray(this.targetUserId) ? this.targetUserId : [this.targetUserId];
2853
3108
  // val.push(obj);
2854
- } else if (this.processNodeObj.REQUIRED !== false) {
2855
- Message.warning(`请选择 ${this.processNodeObj.name} 处理人`);
3109
+ } else if (this.processNodeObj.REQUIRED !== false || (this.processNodeObj.nodeInfoDTO && this.processNodeObj.nodeInfoDTO.REQUIRED !== false)) {
3110
+ if (this.processNodeObj.nodeInfoDTO) {
3111
+ this.processNodeObj.nodeInfoDTO.name && Message.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} 处理人`);
3112
+ } else {
3113
+ this.processNodeObj.name && Message.warning(`请选择 ${this.processNodeObj.name} 处理人`);
3114
+ }
2856
3115
  // ElMessage.warning(`请选择审批人`);
2857
3116
  return false;
2858
3117
  }
@@ -2870,15 +3129,15 @@ var script$g = {
2870
3129
  for (let key in this.userTaskListData) {
2871
3130
  let o = this.userTaskListData[key];
2872
3131
  let refCom = this.$refs[o];
2873
- if (this.processNodeObj.type == this.Enum.ProcessNodeType.多选节点)
2874
- refCom = refCom[0];
3132
+
3133
+ refCom = Array.isArray(refCom) ? refCom[0] : refCom;
2875
3134
  if (refCom) {
2876
3135
  let res = refCom.getValue();
2877
3136
  if (!res) {
2878
3137
  flag = false;
2879
3138
  } else {
2880
3139
  if (
2881
- this.processNodeObj.type == this.Enum.ProcessNodeType.单一分支
3140
+ this.processNodeObj.nodeType == 'exclusiveGateway'
2882
3141
  ) {
2883
3142
  if (this.radioModel && this.radioModel.id) {
2884
3143
  if (
@@ -2890,13 +3149,13 @@ var script$g = {
2890
3149
  ] =
2891
3150
  this.radioModel.incomingConditionItemList[0].compareValue;
2892
3151
  } else {
2893
- Message.warning(
3152
+ this.processNodeObj.name && Message.warning(
2894
3153
  `请选择 ${this.processNodeObj.name} 下一节点`
2895
3154
  );
2896
3155
  return false;
2897
3156
  }
2898
3157
  } else if (
2899
- this.processNodeObj.type == this.Enum.ProcessNodeType.多选节点
3158
+ this.processNodeObj.nodeType == 'inclusiveGateway'
2900
3159
  ) {
2901
3160
  if (this.resultList && this.resultList.length > 0) {
2902
3161
  this.resultList.forEach((r) => {
@@ -2909,7 +3168,7 @@ var script$g = {
2909
3168
  }
2910
3169
  });
2911
3170
  } else {
2912
- Message.warning(`请选择 ${this.processNodeObj.name} `);
3171
+ this.processNodeObj.name && Message.warning(`请选择 ${this.processNodeObj.name} `);
2913
3172
  return false;
2914
3173
  }
2915
3174
  }
@@ -2947,33 +3206,286 @@ var __vue_render__$g = function () {
2947
3206
  "div",
2948
3207
  { staticClass: "user-task" },
2949
3208
  [
2950
- !_vm.processNodeObj.assignee ||
2951
- !_vm.processNodeObj.assignees ||
2952
- _vm.isOption(_vm.processNodeObj.humanPerformerName)
3209
+ _vm.processNodeObj.nodeType == "exclusiveGateway" &&
3210
+ _vm.processNodeObj.branches &&
3211
+ _vm.processNodeObj.branches.length >= 1
3212
+ ? [
3213
+ _vm.processNodeObj.branches.length > 1
3214
+ ? _c(
3215
+ "el-form-item",
3216
+ { attrs: { label: _vm.processNodeObj.name || "下一节点" } },
3217
+ [
3218
+ _c(
3219
+ "el-radio-group",
3220
+ {
3221
+ staticClass: "ml-4",
3222
+ model: {
3223
+ value: _vm.radioModel,
3224
+ callback: function ($$v) {
3225
+ _vm.radioModel = $$v;
3226
+ },
3227
+ expression: "radioModel",
3228
+ },
3229
+ },
3230
+ _vm._l(_vm.processNodeObj.branches, function (item) {
3231
+ return _c(
3232
+ "el-radio",
3233
+ {
3234
+ key: item.id,
3235
+ attrs: { label: item, size: "large" },
3236
+ },
3237
+ [
3238
+ _vm._v(
3239
+ _vm._s(
3240
+ item.name
3241
+ ? item.name
3242
+ : item.nodeInfoDTO
3243
+ ? item.nodeInfoDTO.name
3244
+ : ""
3245
+ )
3246
+ ),
3247
+ ]
3248
+ )
3249
+ }),
3250
+ 1
3251
+ ),
3252
+ ],
3253
+ 1
3254
+ )
3255
+ : _vm._e(),
3256
+ _vm._v(" "),
3257
+ _vm.radioModel.id
3258
+ ? [
3259
+ _vm.radioModel.nodeInfoDTO &&
3260
+ _vm.radioModel.nodeInfoDTO.nodeType == "userTask"
3261
+ ? [
3262
+ _c("userTask", {
3263
+ key: _vm.radioModel.nodeInfoDTO.id,
3264
+ ref: _vm.setItemRef(_vm.radioModel.nodeInfoDTO.id),
3265
+ attrs: {
3266
+ personType: _vm.personType,
3267
+ personEntity: _vm.personEntity,
3268
+ "process-node": Object.assign(
3269
+ {},
3270
+ _vm.radioModel.nodeInfoDTO,
3271
+ {
3272
+ REQUIRED:
3273
+ _vm.radioModel.nodeInfoDTO.setPersonnel ==
3274
+ true &&
3275
+ _vm.radioModel.nodeInfoDTO.assignees &&
3276
+ _vm.radioModel.nodeInfoDTO.assignees.length >
3277
+ 0
3278
+ ? false
3279
+ : true,
3280
+ }
3281
+ ),
3282
+ rules: [
3283
+ { required: true, message: "请选择处理人" },
3284
+ ],
3285
+ },
3286
+ }),
3287
+ ]
3288
+ : _vm.radioModel.nodeInfoDTO &&
3289
+ _vm.radioModel.nodeInfoDTO.nodeType == "inclusiveGateway"
3290
+ ? [
3291
+ _c("userTask", {
3292
+ key: _vm.radioModel.nodeInfoDTO.id,
3293
+ ref: _vm.setItemRef(_vm.radioModel.nodeInfoDTO.id),
3294
+ attrs: {
3295
+ personType: _vm.personType,
3296
+ personEntity: _vm.personEntity,
3297
+ "process-node": Object.assign(
3298
+ {},
3299
+ _vm.radioModel.nodeInfoDTO,
3300
+ {
3301
+ REQUIRED:
3302
+ _vm.radioModel.nodeInfoDTO.setPersonnel ==
3303
+ true &&
3304
+ _vm.radioModel.nodeInfoDTO.assignees &&
3305
+ _vm.radioModel.nodeInfoDTO.assignees.length >
3306
+ 0
3307
+ ? false
3308
+ : true,
3309
+ }
3310
+ ),
3311
+ rules: [
3312
+ { required: true, message: "请选择处理人" },
3313
+ ],
3314
+ },
3315
+ }),
3316
+ ]
3317
+ : _vm.radioModel.nodeInfoDTO &&
3318
+ _vm.radioModel.nodeInfoDTO.nodeType == "exclusiveGateway"
3319
+ ? _vm._l(
3320
+ _vm.radioModel.nodeInfoDTO.branches,
3321
+ function (item) {
3322
+ return _c("userTask", {
3323
+ key: item.nodeInfoDTO.id,
3324
+ ref: _vm.setItemRef(item.nodeInfoDTO.id),
3325
+ refInFor: true,
3326
+ attrs: {
3327
+ personType: _vm.personType,
3328
+ personEntity: _vm.personEntity,
3329
+ processNode: Object.assign({}, item.nodeInfoDTO, {
3330
+ REQUIRED:
3331
+ item.nodeInfoDTO.setPersonnel == true &&
3332
+ item.nodeInfoDTO.assignees &&
3333
+ item.nodeInfoDTO.assignees.length > 0
3334
+ ? false
3335
+ : true,
3336
+ }),
3337
+ lv1label: "下一节点名称",
3338
+ rules: [
3339
+ { required: true, message: "请选择处理人" },
3340
+ ],
3341
+ },
3342
+ })
3343
+ }
3344
+ )
3345
+ : _vm._e(),
3346
+ ]
3347
+ : _vm.processNodeObj &&
3348
+ _vm.processNodeObj.branches &&
3349
+ _vm.processNodeObj.branches.length == 1
3350
+ ? _vm._l(_vm.processNodeObj.branches, function (pitem) {
3351
+ return _c("userTask", {
3352
+ key: pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id,
3353
+ ref: _vm.setItemRef(
3354
+ pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id
3355
+ ),
3356
+ refInFor: true,
3357
+ attrs: {
3358
+ personType: _vm.personType,
3359
+ personEntity: _vm.personEntity,
3360
+ "process-node": Object.assign(
3361
+ {},
3362
+ pitem.nodeInfoDTO ? pitem.nodeInfoDTO : pitem,
3363
+ {
3364
+ REQUIRED:
3365
+ pitem.nodeInfoDTO.setPersonnel == true &&
3366
+ pitem.nodeInfoDTO.assignees &&
3367
+ pitem.nodeInfoDTO.assignees.length > 0
3368
+ ? false
3369
+ : true,
3370
+ }
3371
+ ),
3372
+ rules: [{ required: true, message: "请选择处理人" }],
3373
+ },
3374
+ })
3375
+ })
3376
+ : _vm._e(),
3377
+ ]
3378
+ : _vm.processNodeObj.nodeType == "inclusiveGateway" &&
3379
+ _vm.processNodeObj.branches &&
3380
+ _vm.processNodeObj.branches.length > 0
3381
+ ? [
3382
+ _c(
3383
+ "el-form-item",
3384
+ { attrs: { label: _vm.processNodeObj.name || "下一节点" } },
3385
+ [
3386
+ _c(
3387
+ "el-checkbox-group",
3388
+ {
3389
+ model: {
3390
+ value: _vm.checkList,
3391
+ callback: function ($$v) {
3392
+ _vm.checkList = $$v;
3393
+ },
3394
+ expression: "checkList",
3395
+ },
3396
+ },
3397
+ [
3398
+ _vm._l(_vm.processNodeObj.branches, function (item) {
3399
+ return [
3400
+ _vm.isSelect(item.nodeInfoDTO ? item.nodeInfoDTO : item)
3401
+ ? _c("el-checkbox", {
3402
+ key:
3403
+ "checkbox" +
3404
+ (item.nodeInfoDTO
3405
+ ? item.nodeInfoDTO.id
3406
+ : item.id),
3407
+ attrs: {
3408
+ label: item.nodeInfoDTO
3409
+ ? item.nodeInfoDTO.name
3410
+ : item.name,
3411
+ checked: true,
3412
+ disabled: "",
3413
+ },
3414
+ })
3415
+ : _c("el-checkbox", {
3416
+ key:
3417
+ "checkbox1" +
3418
+ (item.nodeInfoDTO
3419
+ ? item.nodeInfoDTO.id
3420
+ : item.id),
3421
+ attrs: {
3422
+ label: item.nodeInfoDTO
3423
+ ? item.nodeInfoDTO.name
3424
+ : item.name,
3425
+ },
3426
+ }),
3427
+ ]
3428
+ }),
3429
+ ],
3430
+ 2
3431
+ ),
3432
+ ],
3433
+ 1
3434
+ ),
3435
+ _vm._v(" "),
3436
+ _vm._l(_vm.checkModelList, function (item) {
3437
+ return _c("userTask", {
3438
+ key: item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id,
3439
+ ref: _vm.setItemRef(
3440
+ item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id
3441
+ ),
3442
+ refInFor: true,
3443
+ attrs: {
3444
+ personType: _vm.personType,
3445
+ personEntity: _vm.personEntity,
3446
+ processNode: Object.assign(
3447
+ {},
3448
+ item.nodeInfoDTO ? item.nodeInfoDTO : item,
3449
+ {
3450
+ REQUIRED: item.nodeInfoDTO
3451
+ ? item.nodeInfoDTO.setPersonnel == true &&
3452
+ item.nodeInfoDTO.assignees &&
3453
+ item.nodeInfoDTO.assignees.length > 0
3454
+ ? false
3455
+ : true
3456
+ : item.setPersonnel == true &&
3457
+ item.assignees &&
3458
+ item.assignees.length > 0
3459
+ ? false
3460
+ : true,
3461
+ }
3462
+ ),
3463
+ },
3464
+ })
3465
+ }),
3466
+ ]
3467
+ : !_vm.processNodeObj.assignee ||
3468
+ !_vm.processNodeObj.assignees ||
3469
+ _vm.isOption(_vm.processNodeObj.humanPerformerName)
2953
3470
  ? [
2954
3471
  _c(
2955
3472
  "el-form-item",
2956
3473
  {
2957
3474
  staticStyle: { "margin-bottom": "10px" },
2958
3475
  attrs: { label: _vm.lv1label || "节点名称" },
2959
- scopedSlots: _vm._u(
2960
- [
2961
- {
2962
- key: "label",
2963
- fn: function (ref) {
2964
- ref.label;
2965
- return [
2966
- _c("div", { staticStyle: { "font-size": "16px" } }, [
2967
- _vm._v(_vm._s(_vm.lv1label || "节点名称")),
2968
- ]),
2969
- ]
2970
- },
3476
+ scopedSlots: _vm._u([
3477
+ {
3478
+ key: "label",
3479
+ fn: function (ref) {
3480
+ ref.label;
3481
+ return [
3482
+ _c("div", { staticStyle: { "font-size": "16px" } }, [
3483
+ _vm._v(_vm._s(_vm.lv1label || "节点名称")),
3484
+ ]),
3485
+ ]
2971
3486
  },
2972
- ],
2973
- null,
2974
- false,
2975
- 51654731
2976
- ),
3487
+ },
3488
+ ]),
2977
3489
  },
2978
3490
  [
2979
3491
  _vm._v(" "),
@@ -3153,7 +3665,7 @@ __vue_render__$g._withStripped = true;
3153
3665
  /* style */
3154
3666
  const __vue_inject_styles__$g = function (inject) {
3155
3667
  if (!inject) return
3156
- inject("data-v-e5d234be_0", { source: ".user-task :deep(.el-form-item__label) {\n white-space: nowrap;\n text-align: right;\n font-size: 14px;\n overflow: hidden;\n display: block !important;\n text-overflow: ellipsis;\n}\n.user-task .include {\n padding: 6px;\n}\n.user-task .include-type {\n border-radius: 6px;\n}\n.user-task .include-user {\n background: red;\n color: aliceblue;\n}\n.user-task .include-dept {\n background: blue;\n color: aliceblue;\n}\n.user-task .include-post {\n background: green;\n color: aliceblue;\n}\n.user-task .include-assign {\n background: bisque;\n color: red;\n border-radius: 12px;\n display: flex;\n align-items: center;\n width: fit-content;\n height: 18px;\n}\n.user-task .task-index {\n background: #1389ff;\n color: white;\n border-radius: 12px;\n width: -moz-fit-content;\n width: 25px;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n margin-right: 6px;\n}\n\n/*# sourceMappingURL=userTask.vue.map */", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\userTask.vue","userTask.vue"],"names":[],"mappings":"AA2YA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,yBAAA;EACA,uBAAA;AC1YA;AD4YA;EACA,YAAA;AC1YA;AD2YA;EACA,kBAAA;ACzYA;AD2YA;EACA,eAAA;EACA,gBAAA;ACzYA;AD2YA;EACA,gBAAA;EACA,gBAAA;ACzYA;AD2YA;EACA,iBAAA;EACA,gBAAA;ACzYA;AD2YA;EACA,kBAAA;EACA,UAAA;EACA,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EACA,YAAA;ACzYA;AD4YA;EACA,mBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,WAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;AC1YA;;AAEA,uCAAuC","file":"userTask.vue","sourcesContent":["<template>\r\n <div class=\"user-task\">\r\n <template v-if=\"!processNodeObj.assignee || !processNodeObj.assignees || isOption(processNodeObj.humanPerformerName)\">\r\n <el-form-item\r\n :label=\"lv1label || '节点名称'\"\r\n style=\"margin-bottom: 10px\"\r\n >\r\n <template v-slot:label=\"{ label }\">\r\n <!-- <b class=\"task-index\">{{ (index + 1 ) }}</b> -->\r\n <div style=\"font-size: 16px\">{{ (lv1label || '节点名称') }}</div>\r\n </template>\r\n <b style=\"font-size: 16px\">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n <el-form-item\r\n v-if=\"processNodeObj.routeTxt && processNodeObj.routeTxt.length > 0 && processNodeObj.userList && processNodeObj.userList.length >0\"\r\n :label=\"peopleLabel || '所属范围'\"\r\n style=\"margin-bottom: 10px\"\r\n >\r\n <div v-for=\"(item, index) in processNodeObj.routeTxt\" :key=\"item.type\">\r\n <div v-if=\"item.ids && item.ids.length > 0\">\r\n <b class=\"include include-type\" :class=\"['include-' + item.type]\">{{ item.type == 'user' ? '用户' : item.type == 'dept' ? '部门' : '岗位' }}</b>\r\n <span class=\"include include-name\">{{ item.name }}</span>\r\n <div class=\"include include-assign\" :class=\"['include-assign-' + (item.assigneeRetain ? 'true' : 'false')]\" v-if=\"index !== processNodeObj.routeTxt.length - 1\">{{ processNodeObj.assigneeRetain == 'true' ? '且同时满足' : '或者满足' }}</div>\r\n </div>\r\n </div>\r\n </el-form-item>\r\n <!-- 如果有固定的人 -->\r\n <el-form-item :label=\"label || '处理人'\" :rules=\"rules || {}\">\r\n <!-- 使用el-select -->\r\n <!-- 发起流程的时候 -->\r\n <el-select v-if=\"processNodeObj.userList && processNodeObj.userList.length >= 2\" v-model=\"targetUserId\" :multiple=\"processNodeObj.loopCardinality == -1 ? false : true\" @change=\"fixPeopleChange\">\r\n <el-option\r\n v-for=\"(item, index) in processNodeObj.userList\"\r\n :key=\"item.userId\"\r\n :label=\"item.realName\"\r\n :value=\"item.userId\"\r\n ></el-option>\r\n </el-select>\r\n <div class=\"setVal\" v-else-if=\"processNodeObj.userList && processNodeObj.userList.length == 1\">\r\n {{ processNodeObj.userList[0].realName }}\r\n </div>\r\n <!-- 审批流程的时候 -->\r\n <div class=\"setVal\" v-else-if=\"processNodeObj.setPersonnel && processNodeObj.assignees\">\r\n {{ (processNodeObj.assignees || []).map(i => i.name || i.realName).join(', ') }}\r\n </div>\r\n <staffTree\r\n v-else\r\n :processNodeObj=\"processNodeObj\"\r\n v-model=\"targetUserId\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n @update:modelValue=\"\r\n (e) => {\r\n complete(e, processNodeObj);\r\n }\r\n \"\r\n @select=\"selectChange\"\r\n multiple\r\n :max=\"processNodeObj.loopCardinality == -1 ? 1 : 100\"\r\n :items=\"getTreeData(processNodeObj)\"\r\n >\r\n </staffTree>\r\n </el-form-item>\r\n </template>\r\n <!-- <template v-else>\r\n <el-form-item :label=\"lv1label || '节点名称'\">\r\n <b style=\"font-size: 16px\">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n <el-form-item :label=\"label || '处理人'\">\r\n {{ '--' || processNodeObj.routeTxt.userNames }}\r\n </el-form-item>\r\n </template> -->\r\n <!-- <template v-else-if=\"processNodeObj.type == Enum.ProcessNodeType.单一分支\">\r\n <el-form-item\r\n :label=\"processNodeObj.name || '下一节点'\"\r\n v-if=\"processNodeObj.childNode.length > 1\"\r\n >\r\n <el-radio-group v-model=\"radioModel\" class=\"ml-4\">\r\n <el-radio\r\n v-for=\"item in processNodeObj.childNode\"\r\n :key=\"item.id\"\r\n :label=\"item\"\r\n size=\"large\"\r\n >{{ getLabel(item) }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n <template v-if=\"radioModel.id\">\r\n <userTask\r\n :ref=\"setItemRef(radioModel.id)\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :process-node=\"{ ...radioModel, taskNode: processNode.taskNode }\"\r\n :key=\"radioModel.id\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n <template\r\n v-else-if=\"\r\n processNodeObj.type == Enum.ProcessNodeType.多选节点 &&\r\n processNodeObj.childNode.length > 0\r\n \"\r\n >\r\n <el-form-item :label=\"processNodeObj.name || '下一节点'\">\r\n <el-checkbox-group v-model=\"checkList\">\r\n <template v-for=\"item in processNodeObj.childNode\">\r\n <el-checkbox\r\n :label=\"getLabel(item)\"\r\n v-if=\"isSelect(item)\"\r\n :checked=\"true\"\r\n disabled\r\n :key=\"'checkbox' + item.id\"\r\n />\r\n <el-checkbox\r\n :label=\"getLabel(item)\"\r\n v-else\r\n :key=\"'checkbox1' + item.id\"\r\n />\r\n </template>\r\n </el-checkbox-group>\r\n </el-form-item>\r\n <userTask\r\n :ref=\"setItemRef(item.id)\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :key=\"item.id\"\r\n v-for=\"item in checkModelList\"\r\n :processNode=\"{ ...item, taskNode: processNode.taskNode }\"\r\n >\r\n </userTask>\r\n </template> -->\r\n <!-- <template v-else-if=\"processNodeObj.type == Enum.ProcessNodeType.结束事件\">\r\n <el-form-item :label=\"lv1label || '节点名称'\">\r\n <b style=\"font-size: 16px\">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n </template> -->\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport * as Enum from \"../enum\";\r\nimport staffTree from \"../staff-tree.vue\";\r\n// import userTask from \"./userTask.vue\"\r\nimport { Message as ElMessage } from \"element-ui\";\r\nimport api from \"../api\";\r\n\r\nexport default {\r\n name: \"userTask\",\r\n components: { staffTree },\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n processNode: { require: true },\r\n label: \"\",\r\n peopleLabel: \"\",\r\n lv1label: \"\",\r\n personType: \"\",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n rules: {\r\n require: false,\r\n type: Array,\r\n },\r\n },\r\n data() {\r\n return {\r\n deptList: [],\r\n Enum,\r\n resultList: [],\r\n radioModel: {},\r\n checkList: [],\r\n targetUserId: \"\",\r\n targetUserList: [],\r\n processNodeObj: this.processNode,\r\n userTaskListData: {},\r\n personnelList: [],\r\n };\r\n },\r\n computed: {\r\n checkModelList() {\r\n let arr = this.processNodeObj.childNode.filter((o) =>\r\n this.checkList.includes(o.incomingConditionItemList[0].compareValue)\r\n );\r\n\r\n this.resultList = arr || [];\r\n return this.resultList;\r\n },\r\n },\r\n watch: {\r\n processNode: {\r\n handler(newVal, oldVal) {\r\n // 如果是长度为1,固定\r\n if (newVal.userList && newVal.userList.length == 1) {\r\n this.targetUserId = newVal.userList[0].userId\r\n }\r\n this.processNodeObj = newVal || {};\r\n },\r\n deep: true,\r\n }\r\n },\r\n mounted() {\r\n if (\r\n this.processNodeObj.childNode &&\r\n this.processNodeObj.childNode.length == 1 &&\r\n this.processNodeObj.type == Enum.ProcessNodeType.单一分支\r\n ) {\r\n this.radioModel = this.processNodeObj.childNode[0];\r\n }\r\n },\r\n methods: {\r\n isSelect(item) {\r\n if (item.incomingConditionItemList[0]) {\r\n let flag =\r\n item.incomingConditionItemList[0].itemName.includes(\"selecd\");\r\n if (flag) {\r\n if (!this.checkList.includes(item.name))\r\n this.checkList.push(item.name);\r\n }\r\n return flag;\r\n }\r\n return false;\r\n },\r\n fixPeopleChange(e) {\r\n console.log(e, 'e')\r\n this.complete(e, this.processNodeObj)\r\n },\r\n // 获取选中的人的对象\r\n selectChange (list) {\r\n console.log(list, 'list')\r\n this.targetUserList = list;\r\n },\r\n complete(e, item) {\r\n console.log(e, item, 'e item', this.resultList, this.resultList.every((o) => o.vars))\r\n item.vars = e;\r\n if (this.resultList.every((o) => o.vars)) {\r\n this.processNodeObj.vars = this.resultList.map((o) => o.vars);\r\n console.log(this.processNodeObj.vars, 'this.processNodeObj.vars')\r\n this.$emit(\"complete\", this.processNodeObj);\r\n }\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = \"userTask\" + key;\r\n return this.userTaskListData[key];\r\n },\r\n getTreeData(item) {\r\n if (item) {\r\n if (item.humanPerformerName == \"固定部门\") {\r\n return item.routeTxt.departmentIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = this.Enum.UserType.部门;\r\n return obj;\r\n });\r\n } else if (item.humanPerformerName == \"固定单位\") {\r\n return item.routeTxt.companyIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = this.Enum.UserType.主体;\r\n return obj;\r\n });\r\n } else if (item.humanPerformerName == \"固定群组\") {\r\n return item.routeTxt.teamList.map((o) => {\r\n let obj = {};\r\n obj.id = o.id;\r\n obj.leaf = false;\r\n obj.name = o.teamName;\r\n obj.orgType = this.Enum.UserType.群组;\r\n return obj;\r\n });\r\n }\r\n }\r\n return undefined;\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == \"任意指定\" ||\r\n humanPerformer == \"固定部门\" ||\r\n humanPerformer == \"固定单位\" ||\r\n humanPerformer == \"固定角色/岗位\" ||\r\n humanPerformer == \"固定群组\"\r\n );\r\n },\r\n getValue() {\r\n let flag = true;\r\n let val = { multiNodeParticipant: {}, vars: {} };\r\n if (\r\n !this.processNodeObj.type || \r\n this.processNodeObj.type == this.Enum.ProcessNodeType.用户任务 ||\r\n this.processNodeObj.type == Enum.ProcessNodeType.用户节点\r\n ) {\r\n // 新流程需要进入这里\r\n if (!this.processNodeObj.assignee || !Array.isArray(this.processNodeObj.assignee) || !this.processNodeObj.setPersonnel || this.isOption(this.processNodeObj.humanPerformerName)) {\r\n if (this.targetUserId && this.targetUserId.length > 0) {\r\n let obj = {};\r\n val.multiNodeParticipant = {};\r\n val.multiNodeParticipant[this.processNodeObj.id] =\r\n Array.isArray(this.targetUserId) ? this.targetUserId : [this.targetUserId];\r\n // val.push(obj);\r\n } else if (this.processNodeObj.REQUIRED !== false) {\r\n ElMessage.warning(`请选择 ${this.processNodeObj.name} 处理人`);\r\n // ElMessage.warning(`请选择审批人`);\r\n return false;\r\n }\r\n } else {\r\n if (\r\n this.processNodeObj.incomingConditionItemList &&\r\n this.processNodeObj.incomingConditionItemList.length > 0\r\n ) {\r\n val.vars[\r\n this.processNodeObj.incomingConditionItemList[0].itemName\r\n ] = this.processNodeObj.incomingConditionItemList[0].compareValue;\r\n }\r\n }\r\n } else {\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o];\r\n if (this.processNodeObj.type == this.Enum.ProcessNodeType.多选节点)\r\n refCom = refCom[0];\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (\r\n this.processNodeObj.type == this.Enum.ProcessNodeType.单一分支\r\n ) {\r\n if (this.radioModel && this.radioModel.id) {\r\n if (\r\n this.radioModel.incomingConditionItemList &&\r\n this.radioModel.incomingConditionItemList.length > 0\r\n )\r\n val.vars[\r\n this.radioModel.incomingConditionItemList[0].itemName\r\n ] =\r\n this.radioModel.incomingConditionItemList[0].compareValue;\r\n } else {\r\n ElMessage.warning(\r\n `请选择 ${this.processNodeObj.name} 下一节点`\r\n );\r\n return false;\r\n }\r\n } else if (\r\n this.processNodeObj.type == this.Enum.ProcessNodeType.多选节点\r\n ) {\r\n if (this.resultList && this.resultList.length > 0) {\r\n this.resultList.forEach((r) => {\r\n if (r.incomingConditionItemList.length !== 0) {\r\n r.incomingConditionItemList.forEach((item) => {\r\n if (item.itemName) {\r\n val.vars[item.itemName] = item.compareValue;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n ElMessage.warning(`请选择 ${this.processNodeObj.name} `);\r\n return false;\r\n }\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n }\r\n }\r\n if (flag) return val;\r\n return flag;\r\n },\r\n getLabel(node) {\r\n let name = \"\";\r\n if (node.incomingConditionItemList.length > 0) {\r\n name = node.incomingConditionItemList[0].compareValue;\r\n }\r\n return name || node.name || \"后续节点\";\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.user-task {\r\n :deep(.el-form-item__label) {\r\n white-space: nowrap;\r\n text-align: right;\r\n font-size: 14px;\r\n overflow: hidden;\r\n display: block !important;\r\n text-overflow: ellipsis;\r\n }\r\n .include {\r\n padding: 6px;\r\n &-type {\r\n border-radius: 6px;\r\n }\r\n &-user {\r\n background: red;\r\n color: aliceblue;\r\n }\r\n &-dept {\r\n background: blue;\r\n color: aliceblue;\r\n }\r\n &-post {\r\n background: green;\r\n color: aliceblue;\r\n }\r\n &-assign {\r\n background: bisque;\r\n color: red;\r\n border-radius: 12px;\r\n display: flex;\r\n align-items: center;\r\n width: fit-content;\r\n height: 18px;\r\n }\r\n }\r\n .task-index {\r\n background: #1389ff;\r\n color: white;\r\n border-radius: 12px;\r\n width: -moz-fit-content;\r\n width: 25px;\r\n height: 100%;\r\n display: inline-flex;\r\n justify-content: center;\r\n margin-right: 6px;\r\n }\r\n}\r\n</style>\r\n",".user-task :deep(.el-form-item__label) {\n white-space: nowrap;\n text-align: right;\n font-size: 14px;\n overflow: hidden;\n display: block !important;\n text-overflow: ellipsis;\n}\n.user-task .include {\n padding: 6px;\n}\n.user-task .include-type {\n border-radius: 6px;\n}\n.user-task .include-user {\n background: red;\n color: aliceblue;\n}\n.user-task .include-dept {\n background: blue;\n color: aliceblue;\n}\n.user-task .include-post {\n background: green;\n color: aliceblue;\n}\n.user-task .include-assign {\n background: bisque;\n color: red;\n border-radius: 12px;\n display: flex;\n align-items: center;\n width: fit-content;\n height: 18px;\n}\n.user-task .task-index {\n background: #1389ff;\n color: white;\n border-radius: 12px;\n width: -moz-fit-content;\n width: 25px;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n margin-right: 6px;\n}\n\n/*# sourceMappingURL=userTask.vue.map */"]}, media: undefined });
3668
+ inject("data-v-80e687fa_0", { source: ".user-task :deep(.el-form-item__label) {\n white-space: nowrap;\n text-align: right;\n font-size: 14px;\n overflow: hidden;\n display: block !important;\n text-overflow: ellipsis;\n}\n.user-task .include {\n padding: 6px;\n}\n.user-task .include-type {\n border-radius: 6px;\n}\n.user-task .include-user {\n background: red;\n color: aliceblue;\n}\n.user-task .include-dept {\n background: blue;\n color: aliceblue;\n}\n.user-task .include-post {\n background: green;\n color: aliceblue;\n}\n.user-task .include-assign {\n background: bisque;\n color: red;\n border-radius: 12px;\n display: flex;\n align-items: center;\n width: fit-content;\n height: 18px;\n}\n.user-task .task-index {\n background: #1389ff;\n color: white;\n border-radius: 12px;\n width: -moz-fit-content;\n width: 25px;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n margin-right: 6px;\n}\n\n/*# sourceMappingURL=userTask.vue.map */", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\userTask.vue","userTask.vue"],"names":[],"mappings":"AA8oBA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,yBAAA;EACA,uBAAA;AC7oBA;AD+oBA;EACA,YAAA;AC7oBA;AD8oBA;EACA,kBAAA;AC5oBA;AD8oBA;EACA,eAAA;EACA,gBAAA;AC5oBA;AD8oBA;EACA,gBAAA;EACA,gBAAA;AC5oBA;AD8oBA;EACA,iBAAA;EACA,gBAAA;AC5oBA;AD8oBA;EACA,kBAAA;EACA,UAAA;EACA,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EACA,YAAA;AC5oBA;AD+oBA;EACA,mBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,WAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;AC7oBA;;AAEA,uCAAuC","file":"userTask.vue","sourcesContent":["<template>\r\n <div class=\"user-task\">\r\n <!-- <pre class=\"111\">\r\n {{ JSON.stringify(processNodeObj, null, 2) }}\r\n </pre> -->\r\n <!-- 单选 -->\r\n <template v-if=\"processNodeObj.nodeType == 'exclusiveGateway' && processNodeObj.branches && processNodeObj.branches.length >= 1\">\r\n <!-- <div>进来这里</div> -->\r\n <el-form-item\r\n :label=\"processNodeObj.name || '下一节点'\"\r\n v-if=\"processNodeObj.branches.length > 1\"\r\n >\r\n <el-radio-group v-model=\"radioModel\" class=\"ml-4\">\r\n <el-radio\r\n v-for=\"item in processNodeObj.branches\"\r\n :key=\"item.id\"\r\n :label=\"item\"\r\n size=\"large\"\r\n >{{ item.name ? item.name : (item.nodeInfoDTO ? item.nodeInfoDTO.name : '') }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n <!-- <div>{{ 'id: ' + radioModel.id }}</div> -->\r\n <template v-if=\"radioModel.id\">\r\n <!-- 直接是节点 -->\r\n <template v-if=\"radioModel.nodeInfoDTO && radioModel.nodeInfoDTO.nodeType == 'userTask'\">\r\n <userTask\r\n :ref=\"setItemRef(radioModel.nodeInfoDTO.id)\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :process-node=\"{ \r\n ...(radioModel.nodeInfoDTO),\r\n REQUIRED: radioModel.nodeInfoDTO.setPersonnel == true && radioModel.nodeInfoDTO.assignees && radioModel.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }\"\r\n :key=\"radioModel.nodeInfoDTO.id\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n <!-- 多选 -->\r\n <template v-else-if=\"radioModel.nodeInfoDTO && radioModel.nodeInfoDTO.nodeType == 'inclusiveGateway'\">\r\n <userTask\r\n :ref=\"setItemRef(radioModel.nodeInfoDTO.id)\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :process-node=\"{ \r\n ...(radioModel.nodeInfoDTO),\r\n REQUIRED: radioModel.nodeInfoDTO.setPersonnel == true && radioModel.nodeInfoDTO.assignees && radioModel.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }\"\r\n :key=\"radioModel.nodeInfoDTO.id\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n <!-- 单选 -->\r\n <template v-else-if=\"radioModel.nodeInfoDTO && radioModel.nodeInfoDTO.nodeType == 'exclusiveGateway'\">\r\n <userTask\r\n v-for=\"item in radioModel.nodeInfoDTO.branches\"\r\n :key=\"item.nodeInfoDTO.id\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :processNode=\"{ \r\n ...item.nodeInfoDTO,\r\n REQUIRED: item.nodeInfoDTO.setPersonnel == true && item.nodeInfoDTO.assignees && item.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }\"\r\n lv1label=\"下一节点名称\"\r\n :ref=\"setItemRef(item.nodeInfoDTO.id)\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n <template v-else-if=\"processNodeObj && processNodeObj.branches && processNodeObj.branches.length == 1\">\r\n <userTask\r\n v-for=\"pitem in processNodeObj.branches\"\r\n :ref=\"setItemRef(pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id)\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :process-node=\"{ \r\n ...(pitem.nodeInfoDTO ? pitem.nodeInfoDTO : pitem),\r\n REQUIRED: pitem.nodeInfoDTO.setPersonnel == true && pitem.nodeInfoDTO.assignees && pitem.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }\"\r\n :key=\"pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n\r\n\r\n <!-- <template v-if=\"processNodeObj.nodeType == 'exclusiveGateway' && processNodeObj.branches && processNodeObj.branches.length == 1\">\r\n <div>进来这里</div>\r\n <el-form-item\r\n :label=\"processNodeObj.name || '下一节点'\"\r\n v-if=\"processNodeObj.branches.length > 1\"\r\n >\r\n <el-radio-group v-model=\"radioModel\" class=\"ml-4\">\r\n <el-radio\r\n v-for=\"item in processNodeObj.branches\"\r\n :key=\"item.id\"\r\n :label=\"item\"\r\n size=\"large\"\r\n >{{ item.name }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n <div>{{ 'id: ' + radioModel.id }}</div>\r\n \r\n <template v-if=\"processNodeObj && processNodeObj.branches && processNodeObj.branches.length > 0\">\r\n <userTask\r\n v-for=\"pitem in processNodeObj.branches\"\r\n :ref=\"setItemRef(pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id)\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :process-node=\"{ \r\n ...(pitem.nodeInfoDTO ? pitem.nodeInfoDTO : pitem),\r\n REQUIRED: pitem.nodeInfoDTO.setPersonnel == true && pitem.nodeInfoDTO.assignees && pitem.nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }\"\r\n :key=\"pitem.nodeInfoDTO ? pitem.nodeInfoDTO.id : pitem.id\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n </template> -->\r\n <!-- 多选 -->\r\n <template\r\n v-else-if=\"\r\n processNodeObj.nodeType == 'inclusiveGateway' &&\r\n processNodeObj.branches && processNodeObj.branches.length > 0\r\n \"\r\n >\r\n <el-form-item :label=\"processNodeObj.name || '下一节点'\">\r\n <el-checkbox-group v-model=\"checkList\">\r\n <template v-for=\"item in processNodeObj.branches\">\r\n <el-checkbox\r\n :label=\"item.nodeInfoDTO ? item.nodeInfoDTO.name : item.name\"\r\n v-if=\"isSelect(item.nodeInfoDTO ? item.nodeInfoDTO : item)\"\r\n :checked=\"true\"\r\n disabled\r\n :key=\"'checkbox' + (item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id)\"\r\n />\r\n <el-checkbox\r\n :label=\"item.nodeInfoDTO ? item.nodeInfoDTO.name : item.name\"\r\n v-else\r\n :key=\"'checkbox1' + (item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id)\"\r\n />\r\n </template>\r\n </el-checkbox-group>\r\n </el-form-item>\r\n <userTask\r\n :ref=\"setItemRef(item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id)\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :key=\"item.nodeInfoDTO ? item.nodeInfoDTO.id : item.id\"\r\n v-for=\"item in checkModelList\"\r\n :processNode=\"{ \r\n ...(item.nodeInfoDTO ? item.nodeInfoDTO : item),\r\n REQUIRED: item.nodeInfoDTO ? (item.nodeInfoDTO.setPersonnel == true && item.nodeInfoDTO.assignees && item.nodeInfoDTO.assignees.length > 0 ? false : true) : (item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true)\r\n }\"\r\n >\r\n </userTask>\r\n </template>\r\n\r\n <template v-else-if=\"!processNodeObj.assignee || !processNodeObj.assignees || isOption(processNodeObj.humanPerformerName)\">\r\n <el-form-item\r\n :label=\"lv1label || '节点名称'\"\r\n style=\"margin-bottom: 10px\"\r\n >\r\n <template v-slot:label=\"{ label }\">\r\n <!-- <b class=\"task-index\">{{ (index + 1 ) }}</b> -->\r\n <div style=\"font-size: 16px\">{{ (lv1label || '节点名称') }}</div>\r\n </template>\r\n <b style=\"font-size: 16px\">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n <el-form-item\r\n v-if=\"processNodeObj.routeTxt && processNodeObj.routeTxt.length > 0 && processNodeObj.userList && processNodeObj.userList.length >0\"\r\n :label=\"peopleLabel || '所属范围'\"\r\n style=\"margin-bottom: 10px\"\r\n >\r\n <div v-for=\"(item, index) in processNodeObj.routeTxt\" :key=\"item.type\">\r\n <div v-if=\"item.ids && item.ids.length > 0\">\r\n <b class=\"include include-type\" :class=\"['include-' + item.type]\">{{ item.type == 'user' ? '用户' : item.type == 'dept' ? '部门' : '岗位' }}</b>\r\n <span class=\"include include-name\">{{ item.name }}</span>\r\n <div class=\"include include-assign\" :class=\"['include-assign-' + (item.assigneeRetain ? 'true' : 'false')]\" v-if=\"index !== processNodeObj.routeTxt.length - 1\">{{ processNodeObj.assigneeRetain == 'true' ? '且同时满足' : '或者满足' }}</div>\r\n </div>\r\n </div>\r\n </el-form-item>\r\n <!-- 如果有固定的人 -->\r\n <el-form-item :label=\"label || '处理人'\" :rules=\"rules || {}\">\r\n <!-- 使用el-select -->\r\n <!-- 发起流程的时候 -->\r\n <el-select v-if=\"processNodeObj.userList && processNodeObj.userList.length >= 2\" v-model=\"targetUserId\" :multiple=\"processNodeObj.loopCardinality == -1 ? false : true\" @change=\"fixPeopleChange\">\r\n <el-option\r\n v-for=\"(item, index) in processNodeObj.userList\"\r\n :key=\"item.userId\"\r\n :label=\"item.realName\"\r\n :value=\"item.userId\"\r\n ></el-option>\r\n </el-select>\r\n <div class=\"setVal\" v-else-if=\"processNodeObj.userList && processNodeObj.userList.length == 1\">\r\n {{ processNodeObj.userList[0].realName }}\r\n </div>\r\n <!-- 审批流程的时候 -->\r\n <div class=\"setVal\" v-else-if=\"processNodeObj.setPersonnel && processNodeObj.assignees\">\r\n {{ (processNodeObj.assignees || []).map(i => i.name || i.realName).join(', ') }}\r\n </div>\r\n <staffTree\r\n v-else\r\n :processNodeObj=\"processNodeObj\"\r\n v-model=\"targetUserId\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n @update:modelValue=\"\r\n (e) => {\r\n complete(e, processNodeObj);\r\n }\r\n \"\r\n @select=\"selectChange\"\r\n multiple\r\n :max=\"processNodeObj.loopCardinality == -1 ? 1 : 100\"\r\n :items=\"getTreeData(processNodeObj)\"\r\n >\r\n </staffTree>\r\n </el-form-item>\r\n </template>\r\n <!-- <template v-else>\r\n <el-form-item :label=\"lv1label || '节点名称'\">\r\n <b style=\"font-size: 16px\">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n <el-form-item :label=\"label || '处理人'\">\r\n {{ '--' || processNodeObj.routeTxt.userNames }}\r\n </el-form-item>\r\n </template> -->\r\n <!-- <template v-else-if=\"processNodeObj.type == Enum.ProcessNodeType.单一分支\">\r\n <el-form-item\r\n :label=\"processNodeObj.name || '下一节点'\"\r\n v-if=\"processNodeObj.childNode.length > 1\"\r\n >\r\n <el-radio-group v-model=\"radioModel\" class=\"ml-4\">\r\n <el-radio\r\n v-for=\"item in processNodeObj.childNode\"\r\n :key=\"item.id\"\r\n :label=\"item\"\r\n size=\"large\"\r\n >{{ getLabel(item) }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n <template v-if=\"radioModel.id\">\r\n <userTask\r\n :ref=\"setItemRef(radioModel.id)\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :process-node=\"{ ...radioModel, taskNode: processNode.taskNode }\"\r\n :key=\"radioModel.id\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n </template>\r\n <template\r\n v-else-if=\"\r\n processNodeObj.type == Enum.ProcessNodeType.多选节点 &&\r\n processNodeObj.childNode.length > 0\r\n \"\r\n >\r\n <el-form-item :label=\"processNodeObj.name || '下一节点'\">\r\n <el-checkbox-group v-model=\"checkList\">\r\n <template v-for=\"item in processNodeObj.childNode\">\r\n <el-checkbox\r\n :label=\"getLabel(item)\"\r\n v-if=\"isSelect(item)\"\r\n :checked=\"true\"\r\n disabled\r\n :key=\"'checkbox' + item.id\"\r\n />\r\n <el-checkbox\r\n :label=\"getLabel(item)\"\r\n v-else\r\n :key=\"'checkbox1' + item.id\"\r\n />\r\n </template>\r\n </el-checkbox-group>\r\n </el-form-item>\r\n <userTask\r\n :ref=\"setItemRef(item.id)\"\r\n :personType=\"personType\"\r\n :personEntity=\"personEntity\"\r\n :key=\"item.id\"\r\n v-for=\"item in checkModelList\"\r\n :processNode=\"{ ...item, taskNode: processNode.taskNode }\"\r\n >\r\n </userTask>\r\n </template> -->\r\n <!-- <template v-else-if=\"processNodeObj.type == Enum.ProcessNodeType.结束事件\">\r\n <el-form-item :label=\"lv1label || '节点名称'\">\r\n <b style=\"font-size: 16px\">{{ processNodeObj.name }}</b>\r\n </el-form-item>\r\n </template> -->\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport * as Enum from \"../enum\";\r\nimport staffTree from \"../staff-tree.vue\";\r\n// import userTask from \"./userTask.vue\"\r\nimport { Message as ElMessage } from \"element-ui\";\r\nimport api from \"../api\";\r\n\r\nexport default {\r\n name: \"userTask\",\r\n components: { staffTree },\r\n props: {\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n processNode: { require: true },\r\n label: \"\",\r\n peopleLabel: \"\",\r\n lv1label: \"\",\r\n personType: \"\",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n rules: {\r\n require: false,\r\n type: Array,\r\n },\r\n },\r\n data() {\r\n return {\r\n deptList: [],\r\n Enum,\r\n resultList: [],\r\n radioModel: {},\r\n checkList: [],\r\n targetUserId: \"\",\r\n targetUserList: [],\r\n processNodeObj: this.processNode,\r\n userTaskListData: {},\r\n personnelList: [],\r\n };\r\n },\r\n computed: {\r\n checkModelList() {\r\n let arr = this.processNodeObj.branches.filter((o) =>\r\n {\r\n return this.checkList.includes(o.incomingConditionItemList[0].compareValue)\r\n }\r\n );\r\n\r\n this.resultList = arr || [];\r\n return this.resultList;\r\n },\r\n },\r\n watch: {\r\n processNode: {\r\n handler(newVal, oldVal) {\r\n // 如果是长度为1,固定\r\n console.log(newVal, 'processNodeObj')\r\n if (newVal.nodeType == 'userTask' && newVal.setPersonnel && newVal.assignees && newVal.assignees.length > 0) {\r\n this.targetUserId = newVal.assignees.map(i => i.id)\r\n }\r\n if (newVal.userList && newVal.userList.length == 1) {\r\n this.targetUserId = newVal.userList[0].userId\r\n }\r\n this.processNodeObj = newVal || {};\r\n },\r\n deep: true,\r\n }\r\n },\r\n mounted() {\r\n if (\r\n this.processNodeObj.childNode &&\r\n this.processNodeObj.childNode.length == 1 &&\r\n this.processNodeObj.type == Enum.ProcessNodeType.单一分支\r\n ) {\r\n this.radioModel = this.processNodeObj.childNode[0];\r\n }\r\n },\r\n methods: {\r\n isSelect(item) {\r\n if (item.incomingConditionItemList[0]) {\r\n let flag =\r\n item.incomingConditionItemList[0].itemName.includes(\"selecd\");\r\n if (flag) {\r\n if (!this.checkList.includes(item.name))\r\n this.checkList.push(item.name);\r\n }\r\n return flag;\r\n }\r\n return false;\r\n },\r\n fixPeopleChange(e) {\r\n console.log(e, 'e')\r\n this.complete(e, this.processNodeObj)\r\n },\r\n // 获取选中的人的对象\r\n selectChange (list) {\r\n console.log(list, 'list')\r\n this.targetUserList = list;\r\n },\r\n complete(e, item) {\r\n console.log(e, item, 'e item', this.resultList, this.resultList.every((o) => o.vars))\r\n item.vars = e;\r\n if (this.resultList.every((o) => o.vars)) {\r\n this.processNodeObj.vars = this.resultList.map((o) => o.vars);\r\n console.log(this.processNodeObj.vars, 'this.processNodeObj.vars')\r\n this.$emit(\"complete\", this.processNodeObj);\r\n }\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = \"userTask\" + key;\r\n return this.userTaskListData[key];\r\n },\r\n getTreeData(item) {\r\n if (item) {\r\n if (item.humanPerformerName == \"固定部门\") {\r\n return item.routeTxt.departmentIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = this.Enum.UserType.部门;\r\n return obj;\r\n });\r\n } else if (item.humanPerformerName == \"固定单位\") {\r\n return item.routeTxt.companyIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = this.Enum.UserType.主体;\r\n return obj;\r\n });\r\n } else if (item.humanPerformerName == \"固定群组\") {\r\n return item.routeTxt.teamList.map((o) => {\r\n let obj = {};\r\n obj.id = o.id;\r\n obj.leaf = false;\r\n obj.name = o.teamName;\r\n obj.orgType = this.Enum.UserType.群组;\r\n return obj;\r\n });\r\n }\r\n }\r\n return undefined;\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == \"任意指定\" ||\r\n humanPerformer == \"固定部门\" ||\r\n humanPerformer == \"固定单位\" ||\r\n humanPerformer == \"固定角色/岗位\" ||\r\n humanPerformer == \"固定群组\"\r\n );\r\n },\r\n getValue() {\r\n let flag = true;\r\n let val = { multiNodeParticipant: {}, vars: {} };\r\n if (\r\n (!this.processNodeObj.type || \r\n this.processNodeObj.type == this.Enum.ProcessNodeType.用户任务 ||\r\n this.processNodeObj.type == Enum.ProcessNodeType.用户节点)\r\n \r\n ) {\r\n\r\n /**\r\n * &&\r\n (\r\n this.processNodeObj.nodeType != 'exclusiveGateway'\r\n ||\r\n this.processNodeObj.nodeType == 'exclusiveGateway' && this.processNodeObj.branches.length == 0\r\n )\r\n */\r\n // exclusiveGateway 节点\r\n console.log(this.processNodeObj, 'this.processNodeObj 第一个判断')\r\n if (this.processNodeObj.nodeType == 'exclusiveGateway') {\r\n // 进来这里\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o];\r\n\r\n refCom = Array.isArray(refCom) ? refCom[0] : refCom;\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (this.radioModel && this.radioModel.nodeInfoDTO && this.radioModel.nodeInfoDTO.id) {\r\n if (\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList &&\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList.length > 0\r\n )\r\n val.vars[\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList[0].itemName\r\n ] =\r\n this.radioModel.nodeInfoDTO.incomingConditionItemList[0].compareValue;\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n }\r\n \r\n } \r\n else if (this.processNodeObj.nodeType == 'inclusiveGateway') {\r\n // 进来这里\r\n if (this.resultList && this.resultList.length > 0) {\r\n\r\n this.resultList.forEach(rlItem => {\r\n const o = this.userTaskListData[rlItem.nodeInfoDTO.id]\r\n let refCom = this.$refs[o];\r\n\r\n refCom = Array.isArray(refCom) ? refCom[0] : refCom;\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (rlItem.nodeInfoDTO.incomingConditionItemList.length !== 0) {\r\n rlItem.nodeInfoDTO.incomingConditionItemList.forEach((item) => {\r\n if (item.itemName) {\r\n val.vars[item.itemName] = item.compareValue;\r\n }\r\n });\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n })\r\n\r\n } else {\r\n console.log(this.processNodeObj, 'this.processNodeObj.nodeInfoDTO 判断是否是多分支')\r\n // 判断是否是多分支\r\n if (this.processNodeObj && this.processNodeObj.nodeType == 'inclusiveGateway') {\r\n ElMessage.warning(`请选择下一节点`)\r\n } else {\r\n this.processNodeObj.nodeInfoDTO.name && ElMessage.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} `);\r\n }\r\n return false;\r\n }\r\n } \r\n // 新流程需要进入这里\r\n else if (!this.processNodeObj.assignee || !Array.isArray(this.processNodeObj.assignee) || !this.processNodeObj.setPersonnel || this.isOption(this.processNodeObj.humanPerformerName)\r\n || \r\n (this.processNodeObj.nodeInfoDTO && (!this.processNodeObj.nodeInfoDTO.assignee || !Array.isArray(this.processNodeObj.nodeInfoDTO.assignee) || !this.processNodeObj.nodeInfoDTO.setPersonnel || this.isOption(this.processNodeObj.nodeInfoDTO.humanPerformerName)))\r\n ) {\r\n if (this.targetUserId && this.targetUserId.length > 0) {\r\n let obj = {};\r\n val.multiNodeParticipant = {};\r\n val.multiNodeParticipant[this.processNode.nodeInfoDTO ? this.processNodeObj.nodeInfoDTO.id : this.processNodeObj.id] =\r\n Array.isArray(this.targetUserId) ? this.targetUserId : [this.targetUserId];\r\n // val.push(obj);\r\n } else if (this.processNodeObj.REQUIRED !== false || (this.processNodeObj.nodeInfoDTO && this.processNodeObj.nodeInfoDTO.REQUIRED !== false)) {\r\n if (this.processNodeObj.nodeInfoDTO) {\r\n this.processNodeObj.nodeInfoDTO.name && ElMessage.warning(`请选择 ${this.processNodeObj.nodeInfoDTO.name} 处理人`);\r\n } else {\r\n this.processNodeObj.name && ElMessage.warning(`请选择 ${this.processNodeObj.name} 处理人`);\r\n }\r\n // ElMessage.warning(`请选择审批人`);\r\n return false;\r\n }\r\n } else {\r\n if (\r\n this.processNodeObj.incomingConditionItemList &&\r\n this.processNodeObj.incomingConditionItemList.length > 0\r\n ) {\r\n val.vars[\r\n this.processNodeObj.incomingConditionItemList[0].itemName\r\n ] = this.processNodeObj.incomingConditionItemList[0].compareValue;\r\n }\r\n }\r\n } else {\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o];\r\n\r\n refCom = Array.isArray(refCom) ? refCom[0] : refCom;\r\n if (refCom) {\r\n let res = refCom.getValue();\r\n if (!res) {\r\n flag = false;\r\n } else {\r\n if (\r\n this.processNodeObj.nodeType == 'exclusiveGateway'\r\n ) {\r\n if (this.radioModel && this.radioModel.id) {\r\n if (\r\n this.radioModel.incomingConditionItemList &&\r\n this.radioModel.incomingConditionItemList.length > 0\r\n )\r\n val.vars[\r\n this.radioModel.incomingConditionItemList[0].itemName\r\n ] =\r\n this.radioModel.incomingConditionItemList[0].compareValue;\r\n } else {\r\n this.processNodeObj.name && ElMessage.warning(\r\n `请选择 ${this.processNodeObj.name} 下一节点`\r\n );\r\n return false;\r\n }\r\n } else if (\r\n this.processNodeObj.nodeType == 'inclusiveGateway'\r\n ) {\r\n if (this.resultList && this.resultList.length > 0) {\r\n this.resultList.forEach((r) => {\r\n if (r.incomingConditionItemList.length !== 0) {\r\n r.incomingConditionItemList.forEach((item) => {\r\n if (item.itemName) {\r\n val.vars[item.itemName] = item.compareValue;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n this.processNodeObj.name && ElMessage.warning(`请选择 ${this.processNodeObj.name} `);\r\n return false;\r\n }\r\n }\r\n val.multiNodeParticipant = {\r\n ...val.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n val.vars = { ...val.vars, ...res.vars };\r\n }\r\n }\r\n }\r\n }\r\n if (flag) return val;\r\n return flag;\r\n },\r\n getLabel(node) {\r\n let name = \"\";\r\n if (node.incomingConditionItemList.length > 0) {\r\n name = node.incomingConditionItemList[0].compareValue;\r\n }\r\n return name || node.name || \"后续节点\";\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.user-task {\r\n :deep(.el-form-item__label) {\r\n white-space: nowrap;\r\n text-align: right;\r\n font-size: 14px;\r\n overflow: hidden;\r\n display: block !important;\r\n text-overflow: ellipsis;\r\n }\r\n .include {\r\n padding: 6px;\r\n &-type {\r\n border-radius: 6px;\r\n }\r\n &-user {\r\n background: red;\r\n color: aliceblue;\r\n }\r\n &-dept {\r\n background: blue;\r\n color: aliceblue;\r\n }\r\n &-post {\r\n background: green;\r\n color: aliceblue;\r\n }\r\n &-assign {\r\n background: bisque;\r\n color: red;\r\n border-radius: 12px;\r\n display: flex;\r\n align-items: center;\r\n width: fit-content;\r\n height: 18px;\r\n }\r\n }\r\n .task-index {\r\n background: #1389ff;\r\n color: white;\r\n border-radius: 12px;\r\n width: -moz-fit-content;\r\n width: 25px;\r\n height: 100%;\r\n display: inline-flex;\r\n justify-content: center;\r\n margin-right: 6px;\r\n }\r\n}\r\n</style>\r\n",".user-task :deep(.el-form-item__label) {\n white-space: nowrap;\n text-align: right;\n font-size: 14px;\n overflow: hidden;\n display: block !important;\n text-overflow: ellipsis;\n}\n.user-task .include {\n padding: 6px;\n}\n.user-task .include-type {\n border-radius: 6px;\n}\n.user-task .include-user {\n background: red;\n color: aliceblue;\n}\n.user-task .include-dept {\n background: blue;\n color: aliceblue;\n}\n.user-task .include-post {\n background: green;\n color: aliceblue;\n}\n.user-task .include-assign {\n background: bisque;\n color: red;\n border-radius: 12px;\n display: flex;\n align-items: center;\n width: fit-content;\n height: 18px;\n}\n.user-task .task-index {\n background: #1389ff;\n color: white;\n border-radius: 12px;\n width: -moz-fit-content;\n width: 25px;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n margin-right: 6px;\n}\n\n/*# sourceMappingURL=userTask.vue.map */"]}, media: undefined });
3157
3669
 
3158
3670
  };
3159
3671
  /* scoped */
@@ -3626,6 +4138,105 @@ __vue_render__$f._withStripped = true;
3626
4138
  //
3627
4139
  //
3628
4140
  //
4141
+ //
4142
+ //
4143
+ //
4144
+ //
4145
+ //
4146
+ //
4147
+ //
4148
+ //
4149
+ //
4150
+ //
4151
+ //
4152
+ //
4153
+ //
4154
+ //
4155
+ //
4156
+ //
4157
+ //
4158
+ //
4159
+ //
4160
+ //
4161
+ //
4162
+ //
4163
+ //
4164
+ //
4165
+ //
4166
+ //
4167
+ //
4168
+ //
4169
+ //
4170
+ //
4171
+ //
4172
+ //
4173
+ //
4174
+ //
4175
+ //
4176
+ //
4177
+ //
4178
+ //
4179
+ //
4180
+ //
4181
+ //
4182
+ //
4183
+ //
4184
+ //
4185
+ //
4186
+ //
4187
+ //
4188
+ //
4189
+ //
4190
+ //
4191
+ //
4192
+ //
4193
+ //
4194
+ //
4195
+ //
4196
+ //
4197
+ //
4198
+ //
4199
+ //
4200
+ //
4201
+ //
4202
+ //
4203
+ //
4204
+ //
4205
+ //
4206
+ //
4207
+ //
4208
+ //
4209
+ //
4210
+ //
4211
+ //
4212
+ //
4213
+ //
4214
+ //
4215
+ //
4216
+ //
4217
+ //
4218
+ //
4219
+ //
4220
+ //
4221
+ //
4222
+ //
4223
+ //
4224
+ //
4225
+ //
4226
+ //
4227
+ //
4228
+ //
4229
+ //
4230
+ //
4231
+ //
4232
+ //
4233
+ //
4234
+ //
4235
+ //
4236
+ //
4237
+ //
4238
+ //
4239
+ //
3629
4240
 
3630
4241
 
3631
4242
  var script$e = {
@@ -3774,8 +4385,15 @@ var script$e = {
3774
4385
  let o = this.userTaskListData[key];
3775
4386
  console.log(o, 'o', this.$refs[o]);
3776
4387
  let refCom = this.$refs[o].$el ? this.$refs[o] : this.$refs[o][0];
3777
- console.log(refCom, refCom.getValue);
4388
+ console.error('上传', refCom, refCom.getValue);
3778
4389
  let res = refCom.getValue();
4390
+ if (res && res.vars && this.param.incomingConditionItemList&& this.param.incomingConditionItemList.length > 0) {
4391
+ this.param.incomingConditionItemList.forEach(item => {
4392
+ if (!res.vars[item.itemName]) {
4393
+ res.vars[item.itemName] = '';
4394
+ }
4395
+ });
4396
+ }
3779
4397
  console.log(res, 'res get value');
3780
4398
  if (!res) {
3781
4399
  return false;
@@ -3799,6 +4417,23 @@ var script$e = {
3799
4417
  };
3800
4418
  param.vars = { ...param.vars, ...res.vars };
3801
4419
  }
4420
+
4421
+ // 如果不是结束事件,同时multiNodeParticipant为空,则提示
4422
+ if (this.param.nextTaskNode && this.param.nextTaskNode.nodeType != 'endEvent') {
4423
+ // 判断是不是仅有一个"exclusiveGateway"节点,同时该节点仅有一个子节点,同时已经选择了固定的人
4424
+ if (this.param.nextTaskNode.nodeType == 'exclusiveGateway' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0) {
4425
+ param.multiNodeParticipant = {
4426
+ ...param.multiNodeParticipant,
4427
+ [this.param.nextTaskNode.branches[0].nodeInfoDTO.id]: this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(i => i.id)
4428
+ };
4429
+ } else {
4430
+ const keyLen = Object.keys(param.multiNodeParticipant).length;
4431
+ if (!keyLen) {
4432
+ Message.warning('请选择下一节点');
4433
+ return false
4434
+ }
4435
+ }
4436
+ }
3802
4437
  param.pass = true;
3803
4438
 
3804
4439
  if (Date.now()) {
@@ -3820,6 +4455,10 @@ var script$e = {
3820
4455
  return
3821
4456
  }
3822
4457
  loading();
4458
+ if (param) {
4459
+ console.log(param, '测试', this.param);
4460
+ // return;
4461
+ }
3823
4462
  if (preposition) {
3824
4463
  preposition()
3825
4464
  .then((e) => {
@@ -3847,6 +4486,8 @@ var script$e = {
3847
4486
  } else {
3848
4487
  this.$emit("fail", res.msg);
3849
4488
  }
4489
+ }).catch((e) => {
4490
+ this.$emit("fail", e.response ? (e.response.data ? e.response.data.msg || e.response.data.message : '') : e.message || e.msg || '');
3850
4491
  });
3851
4492
  }
3852
4493
  },
@@ -3881,6 +4522,23 @@ var script$e = {
3881
4522
  };
3882
4523
  param.vars = { ...param.vars, ...res.vars };
3883
4524
  }
4525
+
4526
+ // 如果不是结束事件,同时multiNodeParticipant为空,则提示
4527
+ if (this.param.nextTaskNode && this.param.nextTaskNode.nodeType != 'endEvent') {
4528
+ // 判断是不是仅有一个"exclusiveGateway"节点,同时该节点仅有一个子节点,同时已经选择了固定的人
4529
+ if (this.param.nextTaskNode.nodeType == 'exclusiveGateway' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0) {
4530
+ param.multiNodeParticipant = {
4531
+ ...param.multiNodeParticipant,
4532
+ [this.param.nextTaskNode.branches[0].nodeInfoDTO.id]: this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(i => i.id)
4533
+ };
4534
+ } else {
4535
+ const keyLen = Object.keys(param.multiNodeParticipant).length;
4536
+ if (!keyLen) {
4537
+ Message.warning('请选择下一节点');
4538
+ return false
4539
+ }
4540
+ }
4541
+ }
3884
4542
  if (this.param.getVars) {
3885
4543
  let vars = this.param.getVars();
3886
4544
  if (vars === false) return false;
@@ -3915,6 +4573,8 @@ var script$e = {
3915
4573
  } else {
3916
4574
  this.$emit("fail", res.msg);
3917
4575
  }
4576
+ }).catch((e) => {
4577
+ this.$emit("fail", e.response ? (e.response.data ? e.response.data.msg || e.response.data.message : '') : e.message || e.msg || '');
3918
4578
  });
3919
4579
  }
3920
4580
  },
@@ -4071,7 +4731,10 @@ var __vue_render__$e = function () {
4071
4731
  _vm._v(" "),
4072
4732
  _vm._t("file"),
4073
4733
  _vm._v(" "),
4074
- _vm.param.nextTaskNode && _vm.param.nextTaskNode.id
4734
+ _vm.param.nextTaskNode &&
4735
+ _vm.param.nextTaskNode.id &&
4736
+ _vm.param.nextTaskNode.nodeType != "parallelGateway" &&
4737
+ _vm.param.nextTaskNode.nodeType != "exclusiveGateway"
4075
4738
  ? [
4076
4739
  _vm.param.nextTaskNode.nodeType != "endEvent"
4077
4740
  ? [
@@ -4106,7 +4769,31 @@ var __vue_render__$e = function () {
4106
4769
  ]),
4107
4770
  ],
4108
4771
  ]
4109
- : _vm.param.outGatewayUserTaskModel
4772
+ : _vm.param.nextTaskNode.nodeType == "exclusiveGateway" &&
4773
+ _vm.param.outGatewayUserTaskModel &&
4774
+ _vm.param.outGatewayUserTaskModel.length > 0
4775
+ ? _vm._l(_vm.param.outGatewayUserTaskModel, function (item) {
4776
+ return _c("userTask", {
4777
+ key: item.id,
4778
+ ref: _vm.setItemRef(item.id),
4779
+ refInFor: true,
4780
+ attrs: {
4781
+ personType: _vm.param.personType,
4782
+ personEntity: _vm.param.personEntity,
4783
+ processNode: Object.assign({}, item, {
4784
+ pType: _vm.param.nextTaskNode.nodeType,
4785
+ REQUIRED:
4786
+ item.setPersonnel == true &&
4787
+ item.assignees &&
4788
+ item.assignees.length > 0
4789
+ ? false
4790
+ : true,
4791
+ }),
4792
+ },
4793
+ })
4794
+ })
4795
+ : _vm.param.outGatewayUserTaskModel &&
4796
+ _vm.param.outGatewayUserTaskModel.length > 0
4110
4797
  ? _vm._l(_vm.param.outGatewayUserTaskModel, function (item) {
4111
4798
  return _c("userTask", {
4112
4799
  key: item.id,
@@ -4116,8 +4803,144 @@ var __vue_render__$e = function () {
4116
4803
  personType: _vm.param.personType,
4117
4804
  personEntity: _vm.param.personEntity,
4118
4805
  processNode: Object.assign({}, item, {
4119
- taskNode: _vm.param.taskNode,
4806
+ REQUIRED:
4807
+ item.setPersonnel == true &&
4808
+ item.assignees &&
4809
+ item.assignees.length > 0
4810
+ ? false
4811
+ : true,
4812
+ }),
4813
+ },
4814
+ })
4815
+ })
4816
+ : _vm.param.nextTaskNode.nodeType == "exclusiveGateway" &&
4817
+ _vm.param.nextTaskNode.branches &&
4818
+ _vm.param.nextTaskNode.branches.length == 1
4819
+ ? [
4820
+ _vm.param.nextTaskNode.nodeType != "endEvent"
4821
+ ? [
4822
+ _vm.param.nextTaskNode.branches[0].nodeInfoDTO
4823
+ ? _c("userTask", {
4824
+ key: _vm.param.nextTaskNode.branches[0].nodeInfoDTO.id,
4825
+ ref: _vm.setItemRef(
4826
+ _vm.param.nextTaskNode.branches[0].nodeInfoDTO.id
4827
+ ),
4828
+ attrs: {
4829
+ personType:
4830
+ _vm.param.nextTaskNode.branches[0].nodeInfoDTO
4831
+ .personType || "",
4832
+ personEntity: {},
4833
+ "process-node": Object.assign(
4834
+ {},
4835
+ _vm.param.nextTaskNode.branches[0].nodeInfoDTO,
4836
+ {
4837
+ REQUIRED:
4838
+ _vm.param.nextTaskNode.branches[0].nodeInfoDTO
4839
+ .setPersonnel == true &&
4840
+ _vm.param.nextTaskNode.branches[0].nodeInfoDTO
4841
+ .assignees &&
4842
+ _vm.param.nextTaskNode.branches[0].nodeInfoDTO
4843
+ .assignees.length > 0
4844
+ ? false
4845
+ : true,
4846
+ }
4847
+ ),
4848
+ lv1label: "下一节点名称",
4849
+ rules: [{ required: true, message: "请选择处理人" }],
4850
+ },
4851
+ })
4852
+ : _c("userTask", {
4853
+ key: _vm.param.nextTaskNode.branches[0].id,
4854
+ ref: _vm.setItemRef(
4855
+ _vm.param.nextTaskNode.branches[0].id
4856
+ ),
4857
+ attrs: {
4858
+ personType:
4859
+ _vm.param.nextTaskNode.branches[0].personType || "",
4860
+ personEntity: {},
4861
+ "process-node": Object.assign(
4862
+ {},
4863
+ _vm.param.nextTaskNode.branches[0],
4864
+ {
4865
+ REQUIRED:
4866
+ _vm.param.nextTaskNode.branches[0]
4867
+ .setPersonnel == true &&
4868
+ _vm.param.nextTaskNode.branches[0].assignees &&
4869
+ _vm.param.nextTaskNode.branches[0].assignees
4870
+ .length > 0
4871
+ ? false
4872
+ : true,
4873
+ }
4874
+ ),
4875
+ lv1label: "下一节点名称",
4876
+ rules: [{ required: true, message: "请选择处理人" }],
4877
+ },
4878
+ }),
4879
+ ]
4880
+ : [
4881
+ _c("el-form-item", { attrs: { label: "下一节点名称" } }, [
4882
+ _c("b", { staticStyle: { "font-size": "16px" } }, [
4883
+ _vm._v("结束事件"),
4884
+ ]),
4885
+ ]),
4886
+ ],
4887
+ ]
4888
+ : _vm.param.nextTaskNode.nodeType == "exclusiveGateway" &&
4889
+ _vm.param.nextTaskNode.branches &&
4890
+ _vm.param.nextTaskNode.branches.length > 1
4891
+ ? [
4892
+ _vm.param.nextTaskNode.nodeType != "endEvent"
4893
+ ? [
4894
+ _c("userTask", {
4895
+ key: _vm.param.nextTaskNode.id,
4896
+ ref: _vm.setItemRef(_vm.param.nextTaskNode.id),
4897
+ attrs: {
4898
+ personType: _vm.param.nextTaskNode.personType || "",
4899
+ personEntity: {},
4900
+ "process-node": Object.assign(
4901
+ {},
4902
+ _vm.param.nextTaskNode,
4903
+ {
4904
+ REQUIRED:
4905
+ _vm.param.nextTaskNode.setPersonnel == true &&
4906
+ _vm.param.nextTaskNode.assignees &&
4907
+ _vm.param.nextTaskNode.assignees.length > 0
4908
+ ? false
4909
+ : true,
4910
+ }
4911
+ ),
4912
+ lv1label: "下一节点名称",
4913
+ rules: [{ required: true, message: "请选择处理人" }],
4914
+ },
4915
+ }),
4916
+ ]
4917
+ : [
4918
+ _c("el-form-item", { attrs: { label: "下一节点名称" } }, [
4919
+ _c("b", { staticStyle: { "font-size": "16px" } }, [
4920
+ _vm._v("结束事件"),
4921
+ ]),
4922
+ ]),
4923
+ ],
4924
+ ]
4925
+ : _vm.param.nextTaskNode.nodeType == "parallelGateway"
4926
+ ? _vm._l(_vm.param.nextTaskNode.branches, function (item) {
4927
+ return _c("userTask", {
4928
+ key: item.id,
4929
+ ref: _vm.setItemRef(item.id),
4930
+ refInFor: true,
4931
+ attrs: {
4932
+ personType: _vm.param.personType || "",
4933
+ personEntity: _vm.param.personEntity || {},
4934
+ processNode: Object.assign({}, item, {
4935
+ REQUIRED:
4936
+ item.setPersonnel == true &&
4937
+ item.assignees &&
4938
+ item.assignees.length > 0
4939
+ ? false
4940
+ : true,
4120
4941
  }),
4942
+ lv1label: "下一节点名称",
4943
+ rules: [{ required: true, message: "请选择处理人" }],
4121
4944
  },
4122
4945
  })
4123
4946
  })
@@ -4168,11 +4991,11 @@ __vue_render__$e._withStripped = true;
4168
4991
  /* style */
4169
4992
  const __vue_inject_styles__$e = function (inject) {
4170
4993
  if (!inject) return
4171
- inject("data-v-52384047_0", { source: "\n@import \"./content.css\";\n.add-idea[data-v-52384047] {\r\n display: flex;\r\n justify-content: end;\n}\n.add-idea span[data-v-52384047] {\r\n color: #448ef6;\r\n cursor: pointer;\n}\n.sign-idea[data-v-52384047] {\r\n display: flex;\nspan {\r\n color: #448ef6;\r\n cursor: pointer;\n}\n}\n.sign-container[data-v-52384047] {\r\n min-height: 60vh;\n}\r\n", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\complete.vue"],"names":[],"mappings":";AAmaA,uBAAA;AACA;EACA,aAAA;EACA,oBAAA;AACA;AACA;EACA,cAAA;EACA,eAAA;AACA;AACA;EACA,aAAA;AACA;IACA,cAAA;IACA,eAAA;AACA;AACA;AACA;EACA,gBAAA;AACA","file":"complete.vue","sourcesContent":["<template>\r\n <el-form label-width=\"120px\" @submit.native.prevent status-icon>\r\n <template\r\n v-if=\"\r\n param.ProcessInsObj.processDefId !=\r\n 'obj_94014ede99b6495d8f6d5977314faa15'\r\n \"\r\n >\r\n <el-form-item label=\"快捷回复\">\r\n <el-radio-group v-model=\"commentMsg\">\r\n <el-radio label=\"同意\">同意</el-radio>\r\n <el-radio label=\"如拟\" v-if=\"param.showAsPlanned\">如拟</el-radio>\r\n <el-radio label=\"已阅\">已阅</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item v-if=\"param.showCommIdea\">\r\n <commIdea ref=\"commIdea\" @change=\"(e) => (commentMsg = e)\" />\r\n </el-form-item>\r\n <el-form-item\r\n label=\"审批意见\"\r\n :rules=\"[\r\n { required: param.commentMsgRequired, message: '审批意见不能为空' },\r\n ]\"\r\n >\r\n <el-input\r\n v-model=\"commentMsg\"\r\n :rows=\"5\"\r\n maxlength=\"200\"\r\n show-word-limit\r\n type=\"textarea\"\r\n resize=\"none\"\r\n placeholder=\"请输入审批意见\"\r\n class=\"formInput\"\r\n />\r\n <div class=\"add-idea\" v-if=\"param.showCommIdea\">\r\n <span @click=\"$refs['commIdea'].addIdea(commentMsg)\"\r\n >设置为常用意见</span\r\n >\r\n </div>\r\n </el-form-item>\r\n <!-- <el-form-item\r\n label=\"审批签字\"\r\n :rules=\"[\r\n { required: signRequired, message: '审批签字不能为空' },\r\n ]\"\r\n v-if=\"signRequired\"\r\n >\r\n <div class=\"sign-idea\">\r\n <span @click=\"toSign\">去签字</span>\r\n </div>\r\n </el-form-item> -->\r\n </template>\r\n <slot name=\"file\"></slot>\r\n <!-- <el-form-item label=\"下一步处理节点\" size=\"normal\"> </el-form-item> -->\r\n <template v-if=\"param.nextTaskNode && param.nextTaskNode.id\">\r\n <template v-if=\"param.nextTaskNode.nodeType != 'endEvent'\">\r\n <userTask\r\n :key=\"param.nextTaskNode.id\"\r\n :personType=\"param.nextTaskNode.personType || ''\"\r\n :personEntity=\"{}\"\r\n :process-node=\"{\r\n ...param.nextTaskNode,\r\n REQUIRED: param.nextTaskNode.setPersonnel == true && param.nextTaskNode.assignees && param.nextTaskNode.assignees.length > 0 ? false : true,\r\n }\"\r\n lv1label=\"下一节点名称\"\r\n :ref=\"setItemRef(param.nextTaskNode.id)\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else>\r\n <el-form-item label=\"下一节点名称\">\r\n <b style=\"font-size: 16px\">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n <userTask\r\n v-else-if=\"param.outGatewayUserTaskModel\"\r\n v-for=\"item in param.outGatewayUserTaskModel\"\r\n :key=\"item.id\"\r\n :personType=\"param.personType\"\r\n :personEntity=\"param.personEntity\"\r\n :processNode=\"{ ...item, taskNode: param.taskNode }\"\r\n :ref=\"setItemRef(item.id)\"\r\n >\r\n </userTask>\r\n\r\n <slot name=\"form\"></slot>\r\n\r\n <el-dialog title=\"签字\" :visible.sync=\"signVisible\" append-to-body width=\"800px\" @closed=\"closeSign\" :close-on-click-modal=\"false\">\r\n <div class=\"sign-container\">\r\n <TopSign @saveSignature=\"handleSignature\" @validateFail=\"noticeFail\">\r\n </TopSign>\r\n </div>\r\n </el-dialog>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from \"../enum\";\r\nimport staffTree from \"../staff-tree.vue\";\r\nimport api from \"../api\";\r\nimport { Message as ElMessage } from \"element-ui\";\r\nimport userTask from \"./userTask.vue\";\r\nimport commIdea from \"./commIdea.vue\";\r\nimport TopSign from '../../TopSign/topSign.vue'\r\n\r\nexport default {\r\n components: { staffTree, userTask, commIdea, TopSign },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: \"\",\r\n targetUser: [],\r\n userTaskListData: {},\r\n outGatewayUserTaskModel: this.param.outGatewayUserTaskModel,\r\n Enum: $enum,\r\n signVisible: false,\r\n digitalSignature: '',\r\n confirmPreposition: false, \r\n confirmLoading: () => {}\r\n };\r\n },\r\n mounted() {\r\n if (\r\n this.param.ProcessInsObj.processDefId ==\r\n \"obj_94014ede99b6495d8f6d5977314faa15\"\r\n ) {\r\n this.commentMsg = \"同意\";\r\n }\r\n },\r\n computed: {\r\n hasSign() {\r\n if(this.param.taskObj.activityExtendAttributes) {\r\n let tmpObj = JSON.parse(this.param.taskObj.activityExtendAttributes)\r\n if(tmpObj.find(item => item.key == '签字')) {\r\n return tmpObj.find(item => item.key == '签字')\r\n }\r\n else {\r\n return false\r\n }\r\n }\r\n else {\r\n return false\r\n }\r\n },\r\n signRequired() {\r\n const fd = this.param.extendedProperties.find(i => {\r\n return i.name == 'signature'\r\n })\r\n return fd ? true : false\r\n // if(this.param.taskObj.activityExtendAttributes) {\r\n // let tmpObj = JSON.parse(this.param.taskObj.activityExtendAttributes)\r\n // if(tmpObj.find(item => item.key == '签字')) {\r\n // return tmpObj.find(item => item.key == '签字').value == '1'\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n }\r\n },\r\n methods: {\r\n setItemRef(key) {\r\n this.userTaskListData[key] = \"userTask\" + key;\r\n return this.userTaskListData[key];\r\n },\r\n getProcessNode(o) {\r\n let obj = {};\r\n obj.humanPerformerName = o.userTaskModelDTO.humanPerformer.name;\r\n obj.id = o.id;\r\n obj.loopCardinality =\r\n o.loopCardinality || o.userTaskModelDTO.loopCardinality;\r\n obj.name = o.userTaskModelDTO.name;\r\n obj.type = o.type;\r\n obj.routeTxt = o.userTaskModelDTO.routeTxt;\r\n obj.participantList = o.userTaskModelDTO.participantList;\r\n obj.taskNode = this.param.taskNode;\r\n return obj;\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == \"任意指定\" ||\r\n humanPerformer == \"固定部门\" ||\r\n humanPerformer == \"固定账户\" ||\r\n humanPerformer == \"固定单位\"\r\n );\r\n },\r\n\r\n getTreeData(item) {\r\n if (this.param.nextTaskNode) {\r\n if (item.userTaskModelDTO.humanPerformer.name == \"固定部门\") {\r\n return item.userTaskModelDTO.routeTxt.departmentIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = $enum.UserType.部门;\r\n return obj;\r\n });\r\n } else if (item.userTaskModelDTO.humanPerformer.name == \"固定单位\") {\r\n return item.userTaskModelDTO.routeTxt.companyIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = $enum.UserType.主体;\r\n return obj;\r\n });\r\n }\r\n }\r\n return undefined;\r\n },\r\n\r\n getRes() {\r\n return { targetUser: this.targetUser };\r\n },\r\n // 提交前的前置函数,loading函数,附件列表\r\n confirm(preposition, loading, attachment) {\r\n if (Array.isArray(attachment)) {\r\n this.param.attachment = attachment;\r\n }\r\n\r\n console.log(this.param, '测试', this.userTaskListData)\r\n if (!this.commentMsg && this.param.commentMsgRequired) {\r\n ElMessage.warning(\"请输入审批意见\");\r\n return false;\r\n }\r\n if (this.commentMsg.length > 200) {\r\n ElMessage.warning(\"审批意见不能超过200个字\");\r\n return false;\r\n }\r\n // let actionName = this.param.taskObj.commentModels.find(\r\n // (o) => o.isDefault\r\n // ).actionName;\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || \"\",\r\n commentMsg: this.commentMsg || \" \",\r\n comment: this.commentMsg || \" \",\r\n businessData: this.param.businessData,\r\n attachment: this.param.attachment,\r\n };\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n console.log(o, 'o', this.$refs[o])\r\n let refCom = this.$refs[o].$el ? this.$refs[o] : this.$refs[o][0];\r\n console.log(refCom, refCom.getValue);\r\n let res = refCom.getValue();\r\n console.log(res, 'res get value')\r\n if (!res) {\r\n return false;\r\n }\r\n let assignees = []\r\n // 已经选了人,则用返回的,不然用自己选的\r\n const nextTaskNode = this.param.nextTaskNode\r\n if (nextTaskNode.setPersonnel) {\r\n assignees = nextTaskNode.assignees || []\r\n } else {\r\n assignees = (refCom.targetUserList || []).map(i => ({\r\n id: i.id,\r\n name: i.name,\r\n }))\r\n }\r\n param.assignees = assignees\r\n\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n param.vars = { ...param.vars, ...res.vars };\r\n }\r\n param.pass = true\r\n\r\n if (Date.now()) {\r\n console.log(param, 'end', this.param)\r\n // return;\r\n }\r\n // param.variables = {\r\n // wf_form_variable: ''\r\n // }\r\n if (this.param.getVars) {\r\n let vars = this.param.getVars();\r\n if (vars === false) return false;\r\n param.vars = { ...param.vars, ...vars };\r\n }\r\n if(this.signRequired) {\r\n this.confirmPreposition = preposition\r\n this.confirmLoading = loading\r\n this.signVisible = true\r\n return\r\n }\r\n loading();\r\n if (preposition) {\r\n preposition()\r\n .then((e) => {\r\n api.tis\r\n .complete(param)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (e) e();\r\n this.$emit(\"success\");\r\n } else {\r\n this.$emit(\"fail\", res.msg);\r\n }\r\n })\r\n .catch(() => {\r\n this.$emit(\"fail\", \"\");\r\n });\r\n })\r\n .catch(() => {\r\n this.$emit(\"fail\", \"\");\r\n });\r\n } else {\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit(\"success\");\r\n } else {\r\n this.$emit(\"fail\", res.msg);\r\n }\r\n });\r\n }\r\n },\r\n confirmWithSign() {\r\n // let actionName = this.param.taskObj.commentModels.find(\r\n // (o) => o.isDefault\r\n // ).actionName;\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || \"\",\r\n commentMsg: this.commentMsg || \" \",\r\n comment: this.commentMsg || \" \",\r\n businessData: this.param.businessData,\r\n digitalSignature: {\r\n name: this.param.digitalSignature.name,\r\n url: this.param.digitalSignature.url,\r\n },\r\n attachment: this.param.attachment,\r\n };\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o].$el ? this.$refs[o] : this.$refs[o][0];\r\n console.log(refCom, refCom.getValue);\r\n let res = refCom.getValue();\r\n if (!res) {\r\n return false;\r\n }\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n param.vars = { ...param.vars, ...res.vars };\r\n }\r\n if (this.param.getVars) {\r\n let vars = this.param.getVars();\r\n if (vars === false) return false;\r\n param.vars = { ...param.vars, ...vars };\r\n }\r\n param.pass = true\r\n this.confirmLoading();\r\n if (this.confirmPreposition) {\r\n this.confirmPreposition()\r\n .then((e) => {\r\n api.tis\r\n .complete(param)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (e) e();\r\n this.$emit(\"success\");\r\n } else {\r\n this.$emit(\"fail\", res.msg);\r\n }\r\n })\r\n .catch(() => {\r\n this.$emit(\"fail\", \"\");\r\n });\r\n })\r\n .catch(() => {\r\n this.$emit(\"fail\", \"\");\r\n });\r\n } else {\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit(\"success\");\r\n } else {\r\n this.$emit(\"fail\", res.msg);\r\n }\r\n });\r\n }\r\n },\r\n toSign() {\r\n this.signVisible = true\r\n },\r\n handleSignature(e, needClose) {\r\n this.param.digitalSignature = e\r\n console.error(e, 'digitalSignature')\r\n if(needClose) {\r\n this.signVisible = false\r\n this.confirmWithSign()\r\n }\r\n },\r\n closeSign() {\r\n this.signVisible = false\r\n },\r\n noticeFail(msg) {\r\n ElMessage.warning(msg)\r\n }\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n@import \"./content.css\";\r\n.add-idea {\r\n display: flex;\r\n justify-content: end;\r\n}\r\n.add-idea span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n}\r\n.sign-idea {\r\n display: flex;\r\n span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n }\r\n}\r\n.sign-container {\r\n min-height: 60vh;\r\n}\r\n</style>\r\n"]}, media: undefined });
4994
+ inject("data-v-25cbe9d5_0", { source: "\n@import \"./content.css\";\n.add-idea[data-v-25cbe9d5] {\r\n display: flex;\r\n justify-content: end;\n}\n.add-idea span[data-v-25cbe9d5] {\r\n color: #448ef6;\r\n cursor: pointer;\n}\n.sign-idea[data-v-25cbe9d5] {\r\n display: flex;\nspan {\r\n color: #448ef6;\r\n cursor: pointer;\n}\n}\n.sign-container[data-v-25cbe9d5] {\r\n min-height: 60vh;\n}\r\n", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\complete.vue"],"names":[],"mappings":";AAujBA,uBAAA;AACA;EACA,aAAA;EACA,oBAAA;AACA;AACA;EACA,cAAA;EACA,eAAA;AACA;AACA;EACA,aAAA;AACA;IACA,cAAA;IACA,eAAA;AACA;AACA;AACA;EACA,gBAAA;AACA","file":"complete.vue","sourcesContent":["<template>\r\n <el-form label-width=\"120px\" @submit.native.prevent status-icon>\r\n <template\r\n v-if=\"\r\n param.ProcessInsObj.processDefId !=\r\n 'obj_94014ede99b6495d8f6d5977314faa15'\r\n \"\r\n >\r\n <el-form-item label=\"快捷回复\">\r\n <el-radio-group v-model=\"commentMsg\">\r\n <el-radio label=\"同意\">同意</el-radio>\r\n <el-radio label=\"如拟\" v-if=\"param.showAsPlanned\">如拟</el-radio>\r\n <el-radio label=\"已阅\">已阅</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item v-if=\"param.showCommIdea\">\r\n <commIdea ref=\"commIdea\" @change=\"(e) => (commentMsg = e)\" />\r\n </el-form-item>\r\n <el-form-item\r\n label=\"审批意见\"\r\n :rules=\"[\r\n { required: param.commentMsgRequired, message: '审批意见不能为空' },\r\n ]\"\r\n >\r\n <el-input\r\n v-model=\"commentMsg\"\r\n :rows=\"5\"\r\n maxlength=\"200\"\r\n show-word-limit\r\n type=\"textarea\"\r\n resize=\"none\"\r\n placeholder=\"请输入审批意见\"\r\n class=\"formInput\"\r\n />\r\n <div class=\"add-idea\" v-if=\"param.showCommIdea\">\r\n <span @click=\"$refs['commIdea'].addIdea(commentMsg)\"\r\n >设置为常用意见</span\r\n >\r\n </div>\r\n </el-form-item>\r\n <!-- <el-form-item\r\n label=\"审批签字\"\r\n :rules=\"[\r\n { required: signRequired, message: '审批签字不能为空' },\r\n ]\"\r\n v-if=\"signRequired\"\r\n >\r\n <div class=\"sign-idea\">\r\n <span @click=\"toSign\">去签字</span>\r\n </div>\r\n </el-form-item> -->\r\n </template>\r\n <slot name=\"file\"></slot>\r\n <!-- <el-form-item label=\"下一步处理节点\" size=\"normal\"> </el-form-item> -->\r\n <template v-if=\"param.nextTaskNode && param.nextTaskNode.id && param.nextTaskNode.nodeType != 'parallelGateway' && param.nextTaskNode.nodeType != 'exclusiveGateway'\">\r\n <template v-if=\"param.nextTaskNode.nodeType != 'endEvent'\">\r\n <userTask\r\n :key=\"param.nextTaskNode.id\"\r\n :personType=\"param.nextTaskNode.personType || ''\"\r\n :personEntity=\"{}\"\r\n :process-node=\"{\r\n ...param.nextTaskNode,\r\n REQUIRED: param.nextTaskNode.setPersonnel == true && param.nextTaskNode.assignees && param.nextTaskNode.assignees.length > 0 ? false : true,\r\n }\"\r\n lv1label=\"下一节点名称\"\r\n :ref=\"setItemRef(param.nextTaskNode.id)\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else>\r\n <el-form-item label=\"下一节点名称\">\r\n <b style=\"font-size: 16px\">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n <!-- 复杂网关:不带branch, -->\r\n <template v-else-if=\"param.nextTaskNode.nodeType == 'exclusiveGateway' && param.outGatewayUserTaskModel && param.outGatewayUserTaskModel.length > 0\">\r\n <userTask\r\n v-for=\"item in param.outGatewayUserTaskModel\"\r\n :key=\"item.id\"\r\n :personType=\"param.personType\"\r\n :personEntity=\"param.personEntity\"\r\n :processNode=\"{ \r\n ...item,\r\n pType: param.nextTaskNode.nodeType,\r\n REQUIRED: item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true,\r\n }\"\r\n :ref=\"setItemRef(item.id)\"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else-if=\"param.outGatewayUserTaskModel && param.outGatewayUserTaskModel.length > 0\">\r\n <userTask\r\n v-for=\"item in param.outGatewayUserTaskModel\"\r\n :key=\"item.id\"\r\n :personType=\"param.personType\"\r\n :personEntity=\"param.personEntity\"\r\n :processNode=\"{ \r\n ...item,\r\n REQUIRED: item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true,\r\n }\"\r\n :ref=\"setItemRef(item.id)\"\r\n >\r\n </userTask>\r\n </template>\r\n <!-- 互斥网关,只有一个分支 -->\r\n <template v-else-if=\"param.nextTaskNode.nodeType == 'exclusiveGateway' && param.nextTaskNode.branches && param.nextTaskNode.branches.length == 1\">\r\n <template v-if=\"param.nextTaskNode.nodeType != 'endEvent'\">\r\n <userTask\r\n v-if=\"param.nextTaskNode.branches[0].nodeInfoDTO\"\r\n :key=\"param.nextTaskNode.branches[0].nodeInfoDTO.id\"\r\n :personType=\"param.nextTaskNode.branches[0].nodeInfoDTO.personType || ''\"\r\n :personEntity=\"{}\"\r\n :process-node=\"{\r\n ...param.nextTaskNode.branches[0].nodeInfoDTO,\r\n REQUIRED: param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && param.nextTaskNode.branches[0].nodeInfoDTO.assignees && param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0 ? false : true,\r\n }\"\r\n lv1label=\"下一节点名称\"\r\n :ref=\"setItemRef(param.nextTaskNode.branches[0].nodeInfoDTO.id)\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n <userTask\r\n v-else\r\n :key=\"param.nextTaskNode.branches[0].id\"\r\n :personType=\"param.nextTaskNode.branches[0].personType || ''\"\r\n :personEntity=\"{}\"\r\n :process-node=\"{\r\n ...param.nextTaskNode.branches[0],\r\n REQUIRED: param.nextTaskNode.branches[0].setPersonnel == true && param.nextTaskNode.branches[0].assignees && param.nextTaskNode.branches[0].assignees.length > 0 ? false : true,\r\n }\"\r\n lv1label=\"下一节点名称\"\r\n :ref=\"setItemRef(param.nextTaskNode.branches[0].id)\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else>\r\n <el-form-item label=\"下一节点名称\">\r\n <b style=\"font-size: 16px\">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n <!-- 互斥网关,多个分支 -->\r\n <template v-else-if=\"param.nextTaskNode.nodeType == 'exclusiveGateway' && param.nextTaskNode.branches && param.nextTaskNode.branches.length > 1\">\r\n <template v-if=\"param.nextTaskNode.nodeType != 'endEvent'\">\r\n <userTask\r\n :key=\"param.nextTaskNode.id\"\r\n :personType=\"param.nextTaskNode.personType || ''\"\r\n :personEntity=\"{}\"\r\n :process-node=\"{\r\n ...param.nextTaskNode,\r\n REQUIRED: param.nextTaskNode.setPersonnel == true && param.nextTaskNode.assignees && param.nextTaskNode.assignees.length > 0 ? false : true,\r\n }\"\r\n lv1label=\"下一节点名称\"\r\n :ref=\"setItemRef(param.nextTaskNode.id)\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n <template v-else>\r\n <el-form-item label=\"下一节点名称\">\r\n <b style=\"font-size: 16px\">结束事件</b>\r\n </el-form-item>\r\n </template>\r\n </template>\r\n <!-- 并行网关 -->\r\n <template v-else-if=\"param.nextTaskNode.nodeType == 'parallelGateway'\">\r\n <userTask\r\n v-for=\"item in param.nextTaskNode.branches\"\r\n :key=\"item.id\"\r\n :personType=\"param.personType || ''\"\r\n :personEntity=\"param.personEntity || {}\"\r\n :processNode=\"{ \r\n ...item,\r\n REQUIRED: item.setPersonnel == true && item.assignees && item.assignees.length > 0 ? false : true,\r\n }\"\r\n lv1label=\"下一节点名称\"\r\n :ref=\"setItemRef(item.id)\"\r\n :rules=\"[{ required: true, message: '请选择处理人' }]\"\r\n >\r\n </userTask>\r\n </template>\r\n \r\n\r\n <slot name=\"form\"></slot>\r\n\r\n <el-dialog title=\"签字\" :visible.sync=\"signVisible\" append-to-body width=\"800px\" @closed=\"closeSign\" :close-on-click-modal=\"false\">\r\n <div class=\"sign-container\">\r\n <TopSign @saveSignature=\"handleSignature\" @validateFail=\"noticeFail\">\r\n </TopSign>\r\n </div>\r\n </el-dialog>\r\n </el-form>\r\n</template>\r\n\r\n<script>\r\nimport * as $enum from \"../enum\";\r\nimport staffTree from \"../staff-tree.vue\";\r\nimport api from \"../api\";\r\nimport { Message as ElMessage } from \"element-ui\";\r\nimport userTask from \"./userTask.vue\";\r\nimport commIdea from \"./commIdea.vue\";\r\nimport TopSign from '../../TopSign/topSign.vue'\r\n\r\nexport default {\r\n components: { staffTree, userTask, commIdea, TopSign },\r\n props: {\r\n param: Object,\r\n },\r\n data() {\r\n return {\r\n commentMsg: \"\",\r\n targetUser: [],\r\n userTaskListData: {},\r\n outGatewayUserTaskModel: this.param.outGatewayUserTaskModel,\r\n Enum: $enum,\r\n signVisible: false,\r\n digitalSignature: '',\r\n confirmPreposition: false, \r\n confirmLoading: () => {}\r\n };\r\n },\r\n mounted() {\r\n if (\r\n this.param.ProcessInsObj.processDefId ==\r\n \"obj_94014ede99b6495d8f6d5977314faa15\"\r\n ) {\r\n this.commentMsg = \"同意\";\r\n }\r\n },\r\n computed: {\r\n hasSign() {\r\n if(this.param.taskObj.activityExtendAttributes) {\r\n let tmpObj = JSON.parse(this.param.taskObj.activityExtendAttributes)\r\n if(tmpObj.find(item => item.key == '签字')) {\r\n return tmpObj.find(item => item.key == '签字')\r\n }\r\n else {\r\n return false\r\n }\r\n }\r\n else {\r\n return false\r\n }\r\n },\r\n signRequired() {\r\n const fd = this.param.extendedProperties.find(i => {\r\n return i.name == 'signature'\r\n })\r\n return fd ? true : false\r\n // if(this.param.taskObj.activityExtendAttributes) {\r\n // let tmpObj = JSON.parse(this.param.taskObj.activityExtendAttributes)\r\n // if(tmpObj.find(item => item.key == '签字')) {\r\n // return tmpObj.find(item => item.key == '签字').value == '1'\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n // }\r\n // else {\r\n // return false\r\n // }\r\n }\r\n },\r\n methods: {\r\n setItemRef(key) {\r\n this.userTaskListData[key] = \"userTask\" + key;\r\n return this.userTaskListData[key];\r\n },\r\n getProcessNode(o) {\r\n let obj = {};\r\n obj.humanPerformerName = o.userTaskModelDTO.humanPerformer.name;\r\n obj.id = o.id;\r\n obj.loopCardinality =\r\n o.loopCardinality || o.userTaskModelDTO.loopCardinality;\r\n obj.name = o.userTaskModelDTO.name;\r\n obj.type = o.type;\r\n obj.routeTxt = o.userTaskModelDTO.routeTxt;\r\n obj.participantList = o.userTaskModelDTO.participantList;\r\n obj.taskNode = this.param.taskNode;\r\n return obj;\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == \"任意指定\" ||\r\n humanPerformer == \"固定部门\" ||\r\n humanPerformer == \"固定账户\" ||\r\n humanPerformer == \"固定单位\"\r\n );\r\n },\r\n\r\n getTreeData(item) {\r\n if (this.param.nextTaskNode) {\r\n if (item.userTaskModelDTO.humanPerformer.name == \"固定部门\") {\r\n return item.userTaskModelDTO.routeTxt.departmentIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = $enum.UserType.部门;\r\n return obj;\r\n });\r\n } else if (item.userTaskModelDTO.humanPerformer.name == \"固定单位\") {\r\n return item.userTaskModelDTO.routeTxt.companyIds.map((o) => {\r\n let obj = {};\r\n obj.id = o.rangeId;\r\n obj.leaf = false;\r\n obj.name = o.name;\r\n obj.orgType = $enum.UserType.主体;\r\n return obj;\r\n });\r\n }\r\n }\r\n return undefined;\r\n },\r\n\r\n getRes() {\r\n return { targetUser: this.targetUser };\r\n },\r\n // 提交前的前置函数,loading函数,附件列表\r\n confirm(preposition, loading, attachment) {\r\n if (Array.isArray(attachment)) {\r\n this.param.attachment = attachment;\r\n }\r\n\r\n console.log(this.param, '测试', this.userTaskListData)\r\n if (!this.commentMsg && this.param.commentMsgRequired) {\r\n ElMessage.warning(\"请输入审批意见\");\r\n return false;\r\n }\r\n if (this.commentMsg.length > 200) {\r\n ElMessage.warning(\"审批意见不能超过200个字\");\r\n return false;\r\n }\r\n // let actionName = this.param.taskObj.commentModels.find(\r\n // (o) => o.isDefault\r\n // ).actionName;\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || \"\",\r\n commentMsg: this.commentMsg || \" \",\r\n comment: this.commentMsg || \" \",\r\n businessData: this.param.businessData,\r\n attachment: this.param.attachment,\r\n };\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n console.log(o, 'o', this.$refs[o])\r\n let refCom = this.$refs[o].$el ? this.$refs[o] : this.$refs[o][0];\r\n console.error('上传', refCom, refCom.getValue);\r\n let res = refCom.getValue();\r\n if (res && res.vars && this.param.incomingConditionItemList&& this.param.incomingConditionItemList.length > 0) {\r\n this.param.incomingConditionItemList.forEach(item => {\r\n if (!res.vars[item.itemName]) {\r\n res.vars[item.itemName] = ''\r\n }\r\n })\r\n }\r\n console.log(res, 'res get value')\r\n if (!res) {\r\n return false;\r\n }\r\n let assignees = []\r\n // 已经选了人,则用返回的,不然用自己选的\r\n const nextTaskNode = this.param.nextTaskNode\r\n if (nextTaskNode.setPersonnel) {\r\n assignees = nextTaskNode.assignees || []\r\n } else {\r\n assignees = (refCom.targetUserList || []).map(i => ({\r\n id: i.id,\r\n name: i.name,\r\n }))\r\n }\r\n param.assignees = assignees\r\n\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n param.vars = { ...param.vars, ...res.vars };\r\n }\r\n\r\n // 如果不是结束事件,同时multiNodeParticipant为空,则提示\r\n if (this.param.nextTaskNode && this.param.nextTaskNode.nodeType != 'endEvent') {\r\n // 判断是不是仅有一个\"exclusiveGateway\"节点,同时该节点仅有一个子节点,同时已经选择了固定的人\r\n if (this.param.nextTaskNode.nodeType == 'exclusiveGateway' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0) {\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n [this.param.nextTaskNode.branches[0].nodeInfoDTO.id]: this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(i => i.id)\r\n }\r\n } else {\r\n const keyLen = Object.keys(param.multiNodeParticipant).length\r\n if (!keyLen) {\r\n ElMessage.warning('请选择下一节点')\r\n return false\r\n }\r\n }\r\n }\r\n param.pass = true\r\n\r\n if (Date.now()) {\r\n console.log(param, 'end', this.param)\r\n // return;\r\n }\r\n // param.variables = {\r\n // wf_form_variable: ''\r\n // }\r\n if (this.param.getVars) {\r\n let vars = this.param.getVars();\r\n if (vars === false) return false;\r\n param.vars = { ...param.vars, ...vars };\r\n }\r\n if(this.signRequired) {\r\n this.confirmPreposition = preposition\r\n this.confirmLoading = loading\r\n this.signVisible = true\r\n return\r\n }\r\n loading();\r\n if (param) {\r\n console.log(param, '测试', this.param)\r\n // return;\r\n }\r\n if (preposition) {\r\n preposition()\r\n .then((e) => {\r\n api.tis\r\n .complete(param)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (e) e();\r\n this.$emit(\"success\");\r\n } else {\r\n this.$emit(\"fail\", res.msg);\r\n }\r\n })\r\n .catch(() => {\r\n this.$emit(\"fail\", \"\");\r\n });\r\n })\r\n .catch(() => {\r\n this.$emit(\"fail\", \"\");\r\n });\r\n } else {\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit(\"success\");\r\n } else {\r\n this.$emit(\"fail\", res.msg);\r\n }\r\n }).catch((e) => {\r\n this.$emit(\"fail\", e.response ? (e.response.data ? e.response.data.msg || e.response.data.message : '') : e.message || e.msg || '');\r\n });\r\n }\r\n },\r\n confirmWithSign() {\r\n // let actionName = this.param.taskObj.commentModels.find(\r\n // (o) => o.isDefault\r\n // ).actionName;\r\n let param = {\r\n taskId: this.param.taskInstId,\r\n processInstanceId: this.param.processInstId,\r\n // actionName: actionName || \"\",\r\n commentMsg: this.commentMsg || \" \",\r\n comment: this.commentMsg || \" \",\r\n businessData: this.param.businessData,\r\n digitalSignature: {\r\n name: this.param.digitalSignature.name,\r\n url: this.param.digitalSignature.url,\r\n },\r\n attachment: this.param.attachment,\r\n };\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o].$el ? this.$refs[o] : this.$refs[o][0];\r\n console.log(refCom, refCom.getValue);\r\n let res = refCom.getValue();\r\n if (!res) {\r\n return false;\r\n }\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n param.vars = { ...param.vars, ...res.vars };\r\n }\r\n\r\n // 如果不是结束事件,同时multiNodeParticipant为空,则提示\r\n if (this.param.nextTaskNode && this.param.nextTaskNode.nodeType != 'endEvent') {\r\n // 判断是不是仅有一个\"exclusiveGateway\"节点,同时该节点仅有一个子节点,同时已经选择了固定的人\r\n if (this.param.nextTaskNode.nodeType == 'exclusiveGateway' && this.param.nextTaskNode.branches && this.param.nextTaskNode.branches.length == 1 && this.param.nextTaskNode.branches[0].nodeInfoDTO && this.param.nextTaskNode.branches[0].nodeInfoDTO.setPersonnel == true && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees && this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.length > 0) {\r\n param.multiNodeParticipant = {\r\n ...param.multiNodeParticipant,\r\n [this.param.nextTaskNode.branches[0].nodeInfoDTO.id]: this.param.nextTaskNode.branches[0].nodeInfoDTO.assignees.map(i => i.id)\r\n }\r\n } else {\r\n const keyLen = Object.keys(param.multiNodeParticipant).length\r\n if (!keyLen) {\r\n ElMessage.warning('请选择下一节点')\r\n return false\r\n }\r\n }\r\n }\r\n if (this.param.getVars) {\r\n let vars = this.param.getVars();\r\n if (vars === false) return false;\r\n param.vars = { ...param.vars, ...vars };\r\n }\r\n param.pass = true\r\n this.confirmLoading();\r\n if (this.confirmPreposition) {\r\n this.confirmPreposition()\r\n .then((e) => {\r\n api.tis\r\n .complete(param)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (e) e();\r\n this.$emit(\"success\");\r\n } else {\r\n this.$emit(\"fail\", res.msg);\r\n }\r\n })\r\n .catch(() => {\r\n this.$emit(\"fail\", \"\");\r\n });\r\n })\r\n .catch(() => {\r\n this.$emit(\"fail\", \"\");\r\n });\r\n } else {\r\n api.tis.complete(param).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.$emit(\"success\");\r\n } else {\r\n this.$emit(\"fail\", res.msg);\r\n }\r\n }).catch((e) => {\r\n this.$emit(\"fail\", e.response ? (e.response.data ? e.response.data.msg || e.response.data.message : '') : e.message || e.msg || '');\r\n });\r\n }\r\n },\r\n toSign() {\r\n this.signVisible = true\r\n },\r\n handleSignature(e, needClose) {\r\n this.param.digitalSignature = e\r\n console.error(e, 'digitalSignature')\r\n if(needClose) {\r\n this.signVisible = false\r\n this.confirmWithSign()\r\n }\r\n },\r\n closeSign() {\r\n this.signVisible = false\r\n },\r\n noticeFail(msg) {\r\n ElMessage.warning(msg)\r\n }\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n@import \"./content.css\";\r\n.add-idea {\r\n display: flex;\r\n justify-content: end;\r\n}\r\n.add-idea span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n}\r\n.sign-idea {\r\n display: flex;\r\n span {\r\n color: #448ef6;\r\n cursor: pointer;\r\n }\r\n}\r\n.sign-container {\r\n min-height: 60vh;\r\n}\r\n</style>\r\n"]}, media: undefined });
4172
4995
 
4173
4996
  };
4174
4997
  /* scoped */
4175
- const __vue_scope_id__$e = "data-v-52384047";
4998
+ const __vue_scope_id__$e = "data-v-25cbe9d5";
4176
4999
  /* module identifier */
4177
5000
  const __vue_module_identifier__$e = undefined;
4178
5001
  /* functional template */
@@ -6033,9 +6856,6 @@ __vue_component__$9.install = Vue => {
6033
6856
  //
6034
6857
  //
6035
6858
  //
6036
- //
6037
- //
6038
- //
6039
6859
 
6040
6860
 
6041
6861
  var script$8 = {
@@ -6060,8 +6880,8 @@ var script$8 = {
6060
6880
  },
6061
6881
  data() {
6062
6882
  return {
6883
+ myButtonList: [],
6063
6884
  isCollapse: true,
6064
- nodeVisible: false,
6065
6885
  nodeForm: {},
6066
6886
  nodeOption: {
6067
6887
  column: [
@@ -6094,21 +6914,15 @@ var script$8 = {
6094
6914
  },
6095
6915
  immediate: true,
6096
6916
  },
6917
+ buttonList: {
6918
+ handler(val) {
6919
+ this.buttonList = val;
6920
+ },
6921
+ immediate: true,
6922
+ deep: true,
6923
+ },
6097
6924
  },
6098
6925
  methods: {
6099
- // 指定回退
6100
- handleRollback() {
6101
- if (!this.comment) {
6102
- this.$message.error('请填写批复意见');
6103
- return;
6104
- }
6105
- this.nodeVisible = true;
6106
- },
6107
- // 指定回退确定
6108
- handleNodeSubmit() {
6109
- const { nodeId } = this.nodeForm;
6110
- this.$emit('rollback', nodeId);
6111
- },
6112
6926
  getButton(key) {
6113
6927
  return this.buttonList.find(b => b.buttonKey == key);
6114
6928
  },
@@ -6405,50 +7219,20 @@ var __vue_render__$8 = function () {
6405
7219
  on: {
6406
7220
  click: function ($event) {
6407
7221
  return _vm.$emit("print")
6408
- },
6409
- },
6410
- },
6411
- [
6412
- _vm._v(
6413
- "\n " +
6414
- _vm._s(_vm.getButton("wf_print").name) +
6415
- "\n "
6416
- ),
6417
- ]
6418
- )
6419
- : _vm._e(),
6420
- ],
6421
- 2
6422
- ),
6423
- _vm._v(" "),
6424
- _c(
6425
- "el-dialog",
6426
- {
6427
- attrs: { "append-to-body": "", title: "选择回退节点" },
6428
- model: {
6429
- value: _vm.nodeVisible,
6430
- callback: function ($$v) {
6431
- _vm.nodeVisible = $$v;
6432
- },
6433
- expression: "nodeVisible",
6434
- },
6435
- },
6436
- [
6437
- _vm.nodeVisible
6438
- ? _c("nf-form", {
6439
- attrs: { option: _vm.nodeOption },
6440
- on: { submit: _vm.handleNodeSubmit },
6441
- model: {
6442
- value: _vm.nodeForm,
6443
- callback: function ($$v) {
6444
- _vm.nodeForm = $$v;
7222
+ },
6445
7223
  },
6446
- expression: "nodeForm",
6447
7224
  },
6448
- })
7225
+ [
7226
+ _vm._v(
7227
+ "\n " +
7228
+ _vm._s(_vm.getButton("wf_print").name) +
7229
+ "\n "
7230
+ ),
7231
+ ]
7232
+ )
6449
7233
  : _vm._e(),
6450
7234
  ],
6451
- 1
7235
+ 2
6452
7236
  ),
6453
7237
  ],
6454
7238
  1
@@ -6460,11 +7244,11 @@ __vue_render__$8._withStripped = true;
6460
7244
  /* style */
6461
7245
  const __vue_inject_styles__$8 = function (inject) {
6462
7246
  if (!inject) return
6463
- inject("data-v-48029f70_0", { source: ".foot-item[data-v-48029f70] {\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/*# sourceMappingURL=processBtns.vue.map */", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\processBtns.vue","processBtns.vue"],"names":[],"mappings":"AAkKA;EACA,eAAA;EACA,sBAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,wBAAA;EACA,gBAAA;EACA,mDAAA;EACA,2CAAA;ACjKA;;AAEA,0CAA0C","file":"processBtns.vue","sourcesContent":["<template>\r\n <div>\r\n <el-row v-loading=\"loading\" class=\"foot-item\" :style=\"{\r\n // width: isCollapse ? 'calc(100% - 71px)' : 'calc(100% - 241px)',\r\n }\">\r\n <template v-if=\"process.status == 'todo'\">\r\n <!-- 暂存 -->\r\n <!-- <el-button type=\"primary\" :disabled=\"loading\" @click=\"$emit('draft')\">\r\n 暂存\r\n </el-button> -->\r\n <!-- 提交 -->\r\n <el-button v-if=\"getButton('wf_pass')\" type=\"success\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('examine', true, getButton('wf_pass').name)\">\r\n <span>{{ getButton('wf_pass').name }}</span>\r\n </el-button>\r\n <!-- 取消申请 -->\r\n <el-button v-if=\"getButton('wf_reject')\" type=\"danger\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('examine', false, getButton('wf_reject').name)\">\r\n <span>{{ getButton('wf_reject').name }}</span>\r\n </el-button>\r\n <!-- 催办 -->\r\n <el-button v-if=\"userId == process.variables.applyUserId\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('reminders')\">\r\n <span>催办</span>\r\n </el-button>\r\n <!-- 转办 -->\r\n <el-button v-if=\"getButton('wf_transfer')\" type=\"primary\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('user-select', { type: 'transfer', checkType: 'radio', name: getButton('wf_transfer').name })\">{{ getButton('wf_transfer').name\r\n }}</el-button>\r\n <!-- 委托 -->\r\n <el-button v-if=\"getButton('wf_delegate')\" type=\"warning\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('user-select', { type: 'delegate', checkType: 'radio', name: getButton('wf_delegate').name })\">\r\n {{ getButton('wf_delegate').name }}\r\n </el-button>\r\n <!-- 指定回退 -->\r\n <el-button v-if=\"getButton('wf_rollback')\" type=\"success\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('rollback', getButton('wf_rollback').name)\">\r\n {{ getButton('wf_rollback').name }}\r\n </el-button>\r\n <!-- 终止 -->\r\n <el-button v-if=\"getButton('wf_terminate')\" type=\"danger\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('terminate')\">\r\n {{ getButton('wf_terminate').name }}\r\n </el-button>\r\n <!-- 加签 -->\r\n <el-button v-if=\"process.isMultiInstance && getButton('wf_add_instance')\" type=\"primary\" size=\"default\"\r\n :disabled=\"loading\" @click=\"\r\n $emit('user-select', {\r\n type: 'addInstance',\r\n checkType: 'checkbox',\r\n name: getButton('wf_add_instance').name,\r\n })\r\n \">\r\n {{ getButton('wf_add_instance').name }}\r\n </el-button>\r\n <!-- 传阅 -->\r\n <el-button v-if=\"getButton('wf_cctask')\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('circulate', getButton('wf_cctask').name)\">\r\n <span>{{ getButton('wf_cctask').name }}</span>\r\n </el-button>\r\n </template>\r\n <!-- 撤销 -->\r\n <el-button v-if=\"\r\n process.isOwner &&\r\n process.isReturnable &&\r\n !['recall', 'reject'].includes(process.processIsFinished)\r\n \" type=\"warning\" size=\"default\" :disabled=\"loading\" @click=\"$emit('withdraw', '撤销')\">\r\n 撤销\r\n </el-button>\r\n <!-- 打印 -->\r\n <el-button v-if=\"getButton('wf_print')\" type=\"info\" size=\"default\" :disabled=\"loading\" @click=\"$emit('print')\">\r\n {{ getButton('wf_print').name }}\r\n </el-button>\r\n </el-row>\r\n <el-dialog v-model=\"nodeVisible\" append-to-body title=\"选择回退节点\">\r\n <nf-form v-if=\"nodeVisible\" v-model=\"nodeForm\" :option=\"nodeOption\" @submit=\"handleNodeSubmit\"></nf-form>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from '../api';\r\n\r\nexport default {\r\n name: 'nf-button',\r\n props: {\r\n userId: {\r\n type: String,\r\n default: '',\r\n },\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n buttonList: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n process: Object,\r\n comment: String,\r\n },\r\n data() {\r\n return {\r\n isCollapse: true,\r\n nodeVisible: false,\r\n nodeForm: {},\r\n nodeOption: {\r\n column: [\r\n {\r\n label: '节点',\r\n prop: 'nodeId',\r\n type: 'select',\r\n props: {\r\n label: 'nodeName',\r\n value: 'nodeId',\r\n },\r\n span: 24,\r\n rules: [{ required: true, message: '请选择回退节点', trigger: 'change' }],\r\n },\r\n ],\r\n },\r\n backNodes: [],\r\n };\r\n },\r\n watch: {\r\n 'process.taskId': {\r\n handler(val) {\r\n if (val) {\r\n api.repository.backNodes({ taskId: val }).then(res => {\r\n const list = res.data;\r\n this.backNodes = list;\r\n // this.findObject(this.nodeOption.column, 'nodeId').dicData = list;\r\n });\r\n }\r\n },\r\n immediate: true,\r\n },\r\n },\r\n methods: {\r\n // 指定回退\r\n handleRollback() {\r\n if (!this.comment) {\r\n this.$message.error('请填写批复意见');\r\n return;\r\n }\r\n this.nodeVisible = true;\r\n },\r\n // 指定回退确定\r\n handleNodeSubmit() {\r\n const { nodeId } = this.nodeForm;\r\n this.$emit('rollback', nodeId);\r\n },\r\n getButton(key) {\r\n return this.buttonList.find(b => b.buttonKey == key);\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.foot-item {\r\n padding: 12px 0;\r\n background-color: #fff;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n -webkit-transition: 0.3s;\r\n transition: 0.3s;\r\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n}\r\n</style>\r\n",".foot-item {\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/*# sourceMappingURL=processBtns.vue.map */"]}, media: undefined });
7247
+ inject("data-v-a5517ce6_0", { source: ".foot-item[data-v-a5517ce6] {\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/*# sourceMappingURL=processBtns.vue.map */", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\operation\\processBtns.vue","processBtns.vue"],"names":[],"mappings":"AAyJA;EACA,eAAA;EACA,sBAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,wBAAA;EACA,gBAAA;EACA,mDAAA;EACA,2CAAA;ACxJA;;AAEA,0CAA0C","file":"processBtns.vue","sourcesContent":["<template>\r\n <div>\r\n <el-row v-loading=\"loading\" class=\"foot-item\" :style=\"{\r\n // width: isCollapse ? 'calc(100% - 71px)' : 'calc(100% - 241px)',\r\n }\">\r\n <template v-if=\"process.status == 'todo'\">\r\n <!-- 暂存 -->\r\n <!-- <el-button type=\"primary\" :disabled=\"loading\" @click=\"$emit('draft')\">\r\n 暂存\r\n </el-button> -->\r\n <!-- 提交 -->\r\n <el-button v-if=\"getButton('wf_pass')\" type=\"success\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('examine', true, getButton('wf_pass').name)\">\r\n <span>{{ getButton('wf_pass').name }}</span>\r\n </el-button>\r\n <!-- 取消申请 -->\r\n <el-button v-if=\"getButton('wf_reject')\" type=\"danger\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('examine', false, getButton('wf_reject').name)\">\r\n <span>{{ getButton('wf_reject').name }}</span>\r\n </el-button>\r\n <!-- 催办 -->\r\n <el-button v-if=\"userId == process.variables.applyUserId\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('reminders')\">\r\n <span>催办</span>\r\n </el-button>\r\n <!-- 转办 -->\r\n <el-button v-if=\"getButton('wf_transfer')\" type=\"primary\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('user-select', { type: 'transfer', checkType: 'radio', name: getButton('wf_transfer').name })\">{{ getButton('wf_transfer').name\r\n }}</el-button>\r\n <!-- 委托 -->\r\n <el-button v-if=\"getButton('wf_delegate')\" type=\"warning\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('user-select', { type: 'delegate', checkType: 'radio', name: getButton('wf_delegate').name })\">\r\n {{ getButton('wf_delegate').name }}\r\n </el-button>\r\n <!-- 指定回退 -->\r\n <el-button v-if=\"getButton('wf_rollback')\" type=\"success\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('rollback', getButton('wf_rollback').name)\">\r\n {{ getButton('wf_rollback').name }}\r\n </el-button>\r\n <!-- 终止 -->\r\n <el-button v-if=\"getButton('wf_terminate')\" type=\"danger\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('terminate')\">\r\n {{ getButton('wf_terminate').name }}\r\n </el-button>\r\n <!-- 加签 -->\r\n <el-button v-if=\"process.isMultiInstance && getButton('wf_add_instance')\" type=\"primary\" size=\"default\"\r\n :disabled=\"loading\" @click=\"\r\n $emit('user-select', {\r\n type: 'addInstance',\r\n checkType: 'checkbox',\r\n name: getButton('wf_add_instance').name,\r\n })\r\n \">\r\n {{ getButton('wf_add_instance').name }}\r\n </el-button>\r\n <!-- 传阅 -->\r\n <el-button v-if=\"getButton('wf_cctask')\" size=\"default\" :disabled=\"loading\"\r\n @click=\"$emit('circulate', getButton('wf_cctask').name)\">\r\n <span>{{ getButton('wf_cctask').name }}</span>\r\n </el-button>\r\n </template>\r\n <!-- 撤销 -->\r\n <el-button v-if=\"\r\n process.isOwner &&\r\n process.isReturnable &&\r\n !['recall', 'reject'].includes(process.processIsFinished)\r\n \" type=\"warning\" size=\"default\" :disabled=\"loading\" @click=\"$emit('withdraw', '撤销')\">\r\n 撤销\r\n </el-button>\r\n <!-- 打印 -->\r\n <el-button v-if=\"getButton('wf_print')\" type=\"info\" size=\"default\" :disabled=\"loading\" @click=\"$emit('print')\">\r\n {{ getButton('wf_print').name }}\r\n </el-button>\r\n </el-row>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from '../api';\r\n\r\nexport default {\r\n name: 'nf-button',\r\n props: {\r\n userId: {\r\n type: String,\r\n default: '',\r\n },\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n buttonList: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n process: Object,\r\n comment: String,\r\n },\r\n data() {\r\n return {\r\n myButtonList: [],\r\n isCollapse: true,\r\n nodeForm: {},\r\n nodeOption: {\r\n column: [\r\n {\r\n label: '节点',\r\n prop: 'nodeId',\r\n type: 'select',\r\n props: {\r\n label: 'nodeName',\r\n value: 'nodeId',\r\n },\r\n span: 24,\r\n rules: [{ required: true, message: '请选择回退节点', trigger: 'change' }],\r\n },\r\n ],\r\n },\r\n backNodes: [],\r\n };\r\n },\r\n watch: {\r\n 'process.taskId': {\r\n handler(val) {\r\n if (val) {\r\n api.repository.backNodes({ taskId: val }).then(res => {\r\n const list = res.data;\r\n this.backNodes = list;\r\n // this.findObject(this.nodeOption.column, 'nodeId').dicData = list;\r\n });\r\n }\r\n },\r\n immediate: true,\r\n },\r\n buttonList: {\r\n handler(val) {\r\n this.buttonList = val;\r\n },\r\n immediate: true,\r\n deep: true,\r\n },\r\n },\r\n methods: {\r\n getButton(key) {\r\n return this.buttonList.find(b => b.buttonKey == key);\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.foot-item {\r\n padding: 12px 0;\r\n background-color: #fff;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n -webkit-transition: 0.3s;\r\n transition: 0.3s;\r\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n}\r\n</style>\r\n",".foot-item {\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n\n/*# sourceMappingURL=processBtns.vue.map */"]}, media: undefined });
6464
7248
 
6465
7249
  };
6466
7250
  /* scoped */
6467
- const __vue_scope_id__$8 = "data-v-48029f70";
7251
+ const __vue_scope_id__$8 = "data-v-a5517ce6";
6468
7252
  /* module identifier */
6469
7253
  const __vue_module_identifier__$8 = undefined;
6470
7254
  /* functional template */
@@ -7209,6 +7993,7 @@ var script$6 = {
7209
7993
  },
7210
7994
  data() {
7211
7995
  return {
7996
+ scale: 1,
7212
7997
  viewer: null,
7213
7998
  loading: true
7214
7999
  };
@@ -7230,6 +8015,18 @@ var script$6 = {
7230
8015
  }
7231
8016
  },
7232
8017
  methods: {
8018
+ handleWheel(event) {
8019
+ // if (event.ctrlKey) {
8020
+ event.preventDefault();
8021
+ const delta = Math.sign(event.deltaY) * 0.1; // 标准化滚轮值
8022
+ this.scale = Math.max(0.5, Math.min(this.scale - delta, 3)); // 限制缩放范围0.5~3
8023
+ if (this.viewer) {
8024
+ const canvas = this.viewer.get('canvas');
8025
+ // 窗口大小变化时,让画布自适应并居中
8026
+ canvas.zoom(this.scale);
8027
+ }
8028
+ // }
8029
+ },
7233
8030
  async getXml(id) {
7234
8031
  console.log(this.isXml, 'isxml');
7235
8032
  let res = {};
@@ -7281,7 +8078,8 @@ var script$6 = {
7281
8078
  if (this.viewer) {
7282
8079
  const canvas = this.viewer.get('canvas');
7283
8080
  // 窗口大小变化时,让画布自适应并居中
7284
- canvas.zoom('fit-viewport', 'auto');
8081
+ // canvas.zoom('fit-viewport', 'auto');
8082
+ canvas.zoom(1, 'auto');
7285
8083
  }
7286
8084
  },
7287
8085
  // 添加节点颜色
@@ -7359,7 +8157,11 @@ var __vue_render__$6 = function () {
7359
8157
  var _vm = this;
7360
8158
  var _h = _vm.$createElement;
7361
8159
  var _c = _vm._self._c || _h;
7362
- return _c("div", { ref: "container", staticClass: "bpmn-look" })
8160
+ return _c("div", {
8161
+ ref: "container",
8162
+ staticClass: "bpmn-look",
8163
+ on: { wheel: _vm.handleWheel },
8164
+ })
7363
8165
  };
7364
8166
  var __vue_staticRenderFns__$6 = [];
7365
8167
  __vue_render__$6._withStripped = true;
@@ -7367,11 +8169,11 @@ __vue_render__$6._withStripped = true;
7367
8169
  /* style */
7368
8170
  const __vue_inject_styles__$6 = function (inject) {
7369
8171
  if (!inject) return
7370
- inject("data-v-61a90f80_0", { source: "\n.bpmn-look[data-v-61a90f80] {\r\n width: 100%;\r\n height: 500px;\r\n background: white;\r\n background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+) repeat !important;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\n}\n[data-v-61a90f80] .nodePrimary:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #409eff !important;\n}\n[data-v-61a90f80] .nodeSuccess:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #67c23a !important;\n}\n[data-v-61a90f80] .nodeWarn:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #e6a23c !important;\n}\n[data-v-61a90f80] .nodeError:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #f56c6c !important;\n}\n[data-v-61a90f80] .linePrimary:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #409eff !important;\n}\n[data-v-61a90f80] .lineSuccess:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #67c23a !important;\n}\n[data-v-61a90f80] .lineWarn:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #e6a23c !important;\n}\n[data-v-61a90f80] .lineError:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #f56c6c !important;\n}\n[data-v-61a90f80] .djs-element.hover .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-info);\r\n stroke-width: 1px;\n}\n[data-v-61a90f80] .djs-element.selected .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-primary);\r\n stroke-width: 1px;\n}\n[data-v-61a90f80] .djs-tooltip {\r\n font-size: 13px;\r\n width: 120px;\r\n text-align: center;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\n}\n[data-v-61a90f80] .djs-tooltip span {\r\n display: block;\r\n height: 1.2em;\r\n line-height: 1.2em;\n}\n[data-v-61a90f80] .djs-tooltip br {\r\n display: none;\n}\r\n", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\bpmnLook.vue"],"names":[],"mappings":";AA+KA;EACA,WAAA;EACA,aAAA;EACA,iBAAA;EACA,iiBAAA;EACA,yBAAA;EACA,kBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,mBAAA;EACA,mCAAA;EACA,sBAAA;EACA,4BAAA;EACA,iBAAA;AACA;AAEA;EACA,mBAAA;EACA,mCAAA;EACA,sBAAA;EACA,+BAAA;EACA,iBAAA;AACA;AAEA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;EACA,gBAAA;EACA,mBAAA;EACA,uBAAA;AACA;AAEA;EACA,cAAA;EACA,aAAA;EACA,kBAAA;AACA;AACA;EACA,aAAA;AACA","file":"bpmnLook.vue","sourcesContent":["<template>\r\n <div ref=\"container\" class=\"bpmn-look\"></div>\r\n</template>\r\n\r\n<script>\r\nimport BpmnViewer from 'bpmn-js/lib/Viewer';\r\nimport MoveCanvasModule from 'diagram-js/lib/navigation/movecanvas'\r\nimport tooltips from \"diagram-js/lib/features/tooltips\";\r\nimport { handleResolveFlows } from './utils'\r\n// 导入api,在引用组件时会报错:Unknown custom element: <bpmn-look> - did you register the component correctly? For recursive components, make sure to provide the \"name\" option.\r\n// import api from \"./api\";\r\n\r\nexport default {\r\n name: 'bpmn-look',\r\n props: {\r\n diagram: {\r\n type: String,\r\n default: '',\r\n required: true\r\n },\r\n approvalData: {\r\n type: Array,\r\n default: () => ([]),\r\n },\r\n isXml: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n viewer: null,\r\n loading: true\r\n };\r\n },\r\n mounted() {\r\n this.initViewer();\r\n window.addEventListener('resize', this.canvasResize);\r\n },\r\n watch: {\r\n diagram: {\r\n async handler(newVal) {\r\n console.log(newVal.length, 'new')\r\n let xml = newVal\r\n if (xml && this.isXml) {\r\n this.loadXml(xml);\r\n }\r\n },\r\n immediate: true,\r\n }\r\n },\r\n methods: {\r\n async getXml(id) {\r\n console.log(this.isXml, 'isxml')\r\n let res = {}\r\n let xml = ''\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, 'res')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async initViewer() {\r\n if (this.viewer) {\r\n this.viewer.destroy();\r\n }\r\n // 打包的问题,读取不到模块的处理\r\n const View = Object.prototype.toString.call(BpmnViewer) == '[object Function]' ? BpmnViewer : BpmnViewer.default\r\n const Tooltips = Object.prototype.toString.call(tooltips) == '[object Object]' ? tooltips : tooltips.default\r\n const MMoveCanvasModule = Object.prototype.toString.call(MoveCanvasModule) == '[object Object]' ? MoveCanvasModule : MoveCanvasModule.default\r\n console.log(MoveCanvasModule, Object.prototype.toString.call(MoveCanvasModule), 'MoveCanvasModule')\r\n\r\n\r\n this.viewer = new View({\r\n container: this.$refs.container,\r\n additionalModules: [\r\n Tooltips,\r\n MMoveCanvasModule, // 移动整个画布\r\n // {\r\n // textRenderer: ['type', new TextRenderer({ defaultSize: { fontSize: 12 } })]\r\n // }\r\n ],\r\n });\r\n // 画布居中,需要在importXml之前\r\n this.viewer.on('import.done', ({ error }) => {\r\n if (!error) {\r\n console.log(1)\r\n // 画布居中\r\n this.canvasResize()\r\n // 给画布添加审批数据\r\n this.addApprovalData()\r\n }\r\n });\r\n },\r\n canvasResize() {\r\n if (this.viewer) {\r\n const canvas = this.viewer.get('canvas');\r\n // 窗口大小变化时,让画布自适应并居中\r\n canvas.zoom('fit-viewport', 'auto');\r\n }\r\n },\r\n // 添加节点颜色\r\n setNodeColor(nodes) {\r\n const canvas = this.viewer.get(\"canvas\");\r\n const elementRegistry = this.viewer.get(\"elementRegistry\");\r\n const tooltips = this.viewer.get(\"tooltips\");\r\n nodes.forEach((n) => {\r\n if (n.id && n.class) {\r\n canvas.addMarker(n.id, n.class);\r\n }\r\n if (n.id && n.tooltip) {\r\n const node = elementRegistry.get(n.id);\r\n if (node) {\r\n let { x, y, type } = node;\r\n if ([\"bpmn:StartEvent\", \"bpmn:EndEvent\"].includes(type)) {\r\n x = x - 45;\r\n y = y + 65;\r\n } else if ([\"bpmn:UserTask\"].includes(type)) {\r\n x = x - 10;\r\n y = y + 90;\r\n }\r\n tooltips.add({\r\n position: { x, y },\r\n html: n.tooltip,\r\n });\r\n }\r\n }\r\n });\r\n },\r\n addApprovalData() {\r\n console.log(this.approvalData, 'data')\r\n if (!this.approvalData || this.approvalData.length == 0) return;\r\n const flows = handleResolveFlows(this.approvalData)\r\n console.log(flows, 'flows')\r\n if (flows && flows.length > 0) {\r\n this.setNodeColor(flows);\r\n }\r\n },\r\n // 加载xml\r\n async loadXml(xml) {\r\n if (!this.viewer) {\r\n await this.initViewer();\r\n }\r\n try {\r\n // 尝试导入 XML\r\n console.log(xml.length)\r\n const { warnings } = await this.viewer.importXML(xml);\r\n console.log(warnings, 'warningds')\r\n if (warnings.length) {\r\n // 有警告信息时触发 warning 事件\r\n this.$emit('warning', warnings);\r\n }\r\n } catch (error) {\r\n // 导入失败时触发 error 事件\r\n this.$emit('error', {\r\n message: 'XML 加载失败',\r\n detail: error.message\r\n });\r\n console.error('XML 加载失败:', error);\r\n }\r\n }\r\n },\r\n beforeDestroy() {\r\n window.removeEventListener('resize', this.canvasResize);\r\n this.viewer && this.viewer.destroy();\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.bpmn-look {\r\n width: 100%;\r\n height: 500px;\r\n background: white;\r\n background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+) repeat !important;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\r\n}\r\n\r\n::v-deep .nodePrimary:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #409eff !important;\r\n}\r\n\r\n::v-deep .nodeSuccess:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #67c23a !important;\r\n}\r\n\r\n::v-deep .nodeWarn:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #e6a23c !important;\r\n}\r\n\r\n::v-deep .nodeError:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #f56c6c !important;\r\n}\r\n\r\n::v-deep .linePrimary:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #409eff !important;\r\n}\r\n\r\n::v-deep .lineSuccess:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #67c23a !important;\r\n}\r\n\r\n::v-deep .lineWarn:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #e6a23c !important;\r\n}\r\n\r\n::v-deep .lineError:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #f56c6c !important;\r\n}\r\n\r\n::v-deep .djs-element.hover .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-info);\r\n stroke-width: 1px;\r\n}\r\n\r\n::v-deep .djs-element.selected .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-primary);\r\n stroke-width: 1px;\r\n}\r\n\r\n::v-deep .djs-tooltip {\r\n font-size: 13px;\r\n width: 120px;\r\n text-align: center;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n::v-deep .djs-tooltip span {\r\n display: block;\r\n height: 1.2em;\r\n line-height: 1.2em;\r\n}\r\n::v-deep .djs-tooltip br {\r\n display: none;\r\n}\r\n</style>"]}, media: undefined });
8172
+ inject("data-v-0aaf0421_0", { source: "\n.bpmn-look[data-v-0aaf0421] {\r\n width: 100%;\r\n height: 500px;\r\n background: white;\r\n background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+) repeat !important;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\n}\n[data-v-0aaf0421] .nodePrimary:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #409eff !important;\n}\n[data-v-0aaf0421] .nodeSuccess:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #67c23a !important;\n}\n[data-v-0aaf0421] .nodeWarn:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #e6a23c !important;\n}\n[data-v-0aaf0421] .nodeError:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #f56c6c !important;\n}\n[data-v-0aaf0421] .linePrimary:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #409eff !important;\n}\n[data-v-0aaf0421] .lineSuccess:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #67c23a !important;\n}\n[data-v-0aaf0421] .lineWarn:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #e6a23c !important;\n}\n[data-v-0aaf0421] .lineError:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #f56c6c !important;\n}\n[data-v-0aaf0421] .djs-element.hover .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-info);\r\n stroke-width: 1px;\n}\n[data-v-0aaf0421] .djs-element.selected .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-primary);\r\n stroke-width: 1px;\n}\n[data-v-0aaf0421] .djs-tooltip {\r\n font-size: 13px;\r\n width: 120px;\r\n text-align: center;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\n}\n[data-v-0aaf0421] .djs-tooltip span {\r\n display: block;\r\n height: 1.2em;\r\n line-height: 1.2em;\n}\n[data-v-0aaf0421] .djs-tooltip br {\r\n display: none;\n}\r\n", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\bpmnLook.vue"],"names":[],"mappings":";AA6LA;EACA,WAAA;EACA,aAAA;EACA,iBAAA;EACA,iiBAAA;EACA,yBAAA;EACA,kBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,wBAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,0BAAA;AACA;AAEA;EACA,mBAAA;EACA,mCAAA;EACA,sBAAA;EACA,4BAAA;EACA,iBAAA;AACA;AAEA;EACA,mBAAA;EACA,mCAAA;EACA,sBAAA;EACA,+BAAA;EACA,iBAAA;AACA;AAEA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;EACA,gBAAA;EACA,mBAAA;EACA,uBAAA;AACA;AAEA;EACA,cAAA;EACA,aAAA;EACA,kBAAA;AACA;AACA;EACA,aAAA;AACA","file":"bpmnLook.vue","sourcesContent":["<template>\r\n <div ref=\"container\" class=\"bpmn-look\" @wheel=\"handleWheel\"></div>\r\n</template>\r\n\r\n<script>\r\nimport BpmnViewer from 'bpmn-js/lib/Viewer';\r\nimport MoveCanvasModule from 'diagram-js/lib/navigation/movecanvas'\r\nimport tooltips from \"diagram-js/lib/features/tooltips\";\r\nimport { handleResolveFlows } from './utils'\r\n// 导入api,在引用组件时会报错:Unknown custom element: <bpmn-look> - did you register the component correctly? For recursive components, make sure to provide the \"name\" option.\r\n// import api from \"./api\";\r\n\r\nexport default {\r\n name: 'bpmn-look',\r\n props: {\r\n diagram: {\r\n type: String,\r\n default: '',\r\n required: true\r\n },\r\n approvalData: {\r\n type: Array,\r\n default: () => ([]),\r\n },\r\n isXml: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n },\r\n data() {\r\n return {\r\n scale: 1,\r\n viewer: null,\r\n loading: true\r\n };\r\n },\r\n mounted() {\r\n this.initViewer();\r\n window.addEventListener('resize', this.canvasResize);\r\n },\r\n watch: {\r\n diagram: {\r\n async handler(newVal) {\r\n console.log(newVal.length, 'new')\r\n let xml = newVal\r\n if (xml && this.isXml) {\r\n this.loadXml(xml);\r\n }\r\n },\r\n immediate: true,\r\n }\r\n },\r\n methods: {\r\n handleWheel(event) {\r\n // if (event.ctrlKey) {\r\n event.preventDefault();\r\n const delta = Math.sign(event.deltaY) * 0.1; // 标准化滚轮值\r\n this.scale = Math.max(0.5, Math.min(this.scale - delta, 3)); // 限制缩放范围0.5~3\r\n if (this.viewer) {\r\n const canvas = this.viewer.get('canvas');\r\n // 窗口大小变化时,让画布自适应并居中\r\n canvas.zoom(this.scale);\r\n }\r\n // }\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, 'isxml')\r\n let res = {}\r\n let xml = ''\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, 'res')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async initViewer() {\r\n if (this.viewer) {\r\n this.viewer.destroy();\r\n }\r\n // 打包的问题,读取不到模块的处理\r\n const View = Object.prototype.toString.call(BpmnViewer) == '[object Function]' ? BpmnViewer : BpmnViewer.default\r\n const Tooltips = Object.prototype.toString.call(tooltips) == '[object Object]' ? tooltips : tooltips.default\r\n const MMoveCanvasModule = Object.prototype.toString.call(MoveCanvasModule) == '[object Object]' ? MoveCanvasModule : MoveCanvasModule.default\r\n console.log(MoveCanvasModule, Object.prototype.toString.call(MoveCanvasModule), 'MoveCanvasModule')\r\n\r\n\r\n this.viewer = new View({\r\n container: this.$refs.container,\r\n additionalModules: [\r\n Tooltips,\r\n MMoveCanvasModule, // 移动整个画布\r\n // {\r\n // textRenderer: ['type', new TextRenderer({ defaultSize: { fontSize: 12 } })]\r\n // }\r\n ],\r\n });\r\n // 画布居中,需要在importXml之前\r\n this.viewer.on('import.done', ({ error }) => {\r\n if (!error) {\r\n console.log(1)\r\n // 画布居中\r\n this.canvasResize()\r\n // 给画布添加审批数据\r\n this.addApprovalData()\r\n }\r\n });\r\n },\r\n canvasResize() {\r\n if (this.viewer) {\r\n const canvas = this.viewer.get('canvas');\r\n // 窗口大小变化时,让画布自适应并居中\r\n // canvas.zoom('fit-viewport', 'auto');\r\n canvas.zoom(1, 'auto');\r\n }\r\n },\r\n // 添加节点颜色\r\n setNodeColor(nodes) {\r\n const canvas = this.viewer.get(\"canvas\");\r\n const elementRegistry = this.viewer.get(\"elementRegistry\");\r\n const tooltips = this.viewer.get(\"tooltips\");\r\n nodes.forEach((n) => {\r\n if (n.id && n.class) {\r\n canvas.addMarker(n.id, n.class);\r\n }\r\n if (n.id && n.tooltip) {\r\n const node = elementRegistry.get(n.id);\r\n if (node) {\r\n let { x, y, type } = node;\r\n if ([\"bpmn:StartEvent\", \"bpmn:EndEvent\"].includes(type)) {\r\n x = x - 45;\r\n y = y + 65;\r\n } else if ([\"bpmn:UserTask\"].includes(type)) {\r\n x = x - 10;\r\n y = y + 90;\r\n }\r\n tooltips.add({\r\n position: { x, y },\r\n html: n.tooltip,\r\n });\r\n }\r\n }\r\n });\r\n },\r\n addApprovalData() {\r\n console.log(this.approvalData, 'data')\r\n if (!this.approvalData || this.approvalData.length == 0) return;\r\n const flows = handleResolveFlows(this.approvalData)\r\n console.log(flows, 'flows')\r\n if (flows && flows.length > 0) {\r\n this.setNodeColor(flows);\r\n }\r\n },\r\n // 加载xml\r\n async loadXml(xml) {\r\n if (!this.viewer) {\r\n await this.initViewer();\r\n }\r\n try {\r\n // 尝试导入 XML\r\n console.log(xml.length)\r\n const { warnings } = await this.viewer.importXML(xml);\r\n console.log(warnings, 'warningds')\r\n if (warnings.length) {\r\n // 有警告信息时触发 warning 事件\r\n this.$emit('warning', warnings);\r\n }\r\n } catch (error) {\r\n // 导入失败时触发 error 事件\r\n this.$emit('error', {\r\n message: 'XML 加载失败',\r\n detail: error.message\r\n });\r\n console.error('XML 加载失败:', error);\r\n }\r\n }\r\n },\r\n beforeDestroy() {\r\n window.removeEventListener('resize', this.canvasResize);\r\n this.viewer && this.viewer.destroy();\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.bpmn-look {\r\n width: 100%;\r\n height: 500px;\r\n background: white;\r\n background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+) repeat !important;\r\n border: 1px solid #e0e0e0;\r\n border-radius: 4px;\r\n}\r\n\r\n::v-deep .nodePrimary:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #409eff !important;\r\n}\r\n\r\n::v-deep .nodeSuccess:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #67c23a !important;\r\n}\r\n\r\n::v-deep .nodeWarn:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #e6a23c !important;\r\n}\r\n\r\n::v-deep .nodeError:not(.djs-connection) .djs-visual> :nth-child(1) {\r\n fill: #f56c6c !important;\r\n}\r\n\r\n::v-deep .linePrimary:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #409eff !important;\r\n}\r\n\r\n::v-deep .lineSuccess:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #67c23a !important;\r\n}\r\n\r\n::v-deep .lineWarn:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #e6a23c !important;\r\n}\r\n\r\n::v-deep .lineError:not(.djs-shape) .djs-visual :last-child {\r\n stroke: #f56c6c !important;\r\n}\r\n\r\n::v-deep .djs-element.hover .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-info);\r\n stroke-width: 1px;\r\n}\r\n\r\n::v-deep .djs-element.selected .djs-outline {\r\n visibility: visible;\r\n shape-rendering: geometricPrecision;\r\n stroke-dasharray: 3, 3;\r\n stroke: var(--el-color-primary);\r\n stroke-width: 1px;\r\n}\r\n\r\n::v-deep .djs-tooltip {\r\n font-size: 13px;\r\n width: 120px;\r\n text-align: center;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n}\r\n\r\n::v-deep .djs-tooltip span {\r\n display: block;\r\n height: 1.2em;\r\n line-height: 1.2em;\r\n}\r\n::v-deep .djs-tooltip br {\r\n display: none;\r\n}\r\n</style>"]}, media: undefined });
7371
8173
 
7372
8174
  };
7373
8175
  /* scoped */
7374
- const __vue_scope_id__$6 = "data-v-61a90f80";
8176
+ const __vue_scope_id__$6 = "data-v-0aaf0421";
7375
8177
  /* module identifier */
7376
8178
  const __vue_module_identifier__$6 = undefined;
7377
8179
  /* functional template */
@@ -7680,6 +8482,83 @@ __vue_render__$6._withStripped = true;
7680
8482
  //
7681
8483
  //
7682
8484
  //
8485
+ //
8486
+ //
8487
+ //
8488
+ //
8489
+ //
8490
+ //
8491
+ //
8492
+ //
8493
+ //
8494
+ //
8495
+ //
8496
+ //
8497
+ //
8498
+ //
8499
+ //
8500
+ //
8501
+ //
8502
+ //
8503
+ //
8504
+ //
8505
+ //
8506
+ //
8507
+ //
8508
+ //
8509
+ //
8510
+ //
8511
+ //
8512
+ //
8513
+ //
8514
+ //
8515
+ //
8516
+ //
8517
+ //
8518
+ //
8519
+ //
8520
+ //
8521
+ //
8522
+ //
8523
+ //
8524
+ //
8525
+ //
8526
+ //
8527
+ //
8528
+ //
8529
+ //
8530
+ //
8531
+ //
8532
+ //
8533
+ //
8534
+ //
8535
+ //
8536
+ //
8537
+ //
8538
+ //
8539
+ //
8540
+ //
8541
+ //
8542
+ //
8543
+ //
8544
+ //
8545
+ //
8546
+ //
8547
+ //
8548
+ //
8549
+ //
8550
+ //
8551
+ //
8552
+ //
8553
+ //
8554
+ //
8555
+ //
8556
+ //
8557
+ //
8558
+ //
8559
+ //
8560
+ //
8561
+ //
7683
8562
 
7684
8563
 
7685
8564
  var script$5 = {
@@ -7783,6 +8662,7 @@ var script$5 = {
7783
8662
  // emits: ['update:modelValue', "getData", "change", "changeGetData"],
7784
8663
  data() {
7785
8664
  return {
8665
+ incomingConditionItemList: [],
7786
8666
  // 流程信息
7787
8667
  deptId: '',
7788
8668
  initProcessData: {
@@ -8037,8 +8917,13 @@ var script$5 = {
8037
8917
  const deptId = ((this.processData.process || {}).variables || {}).deptId;
8038
8918
  this.deptId = deptId;
8039
8919
  const taskId = (this.processData.process || {}).taskId;
8920
+ this.taskObj.buttons = this.processData.button;
8040
8921
  this.absoluteTaskId = taskId;
8922
+ this.straightenBtns();
8041
8923
  console.log(deptId, 'id');
8924
+ this.$nextTick(() => {
8925
+ this.calculateHeight();
8926
+ });
8042
8927
 
8043
8928
  console.log(this.processData.flow, 'flw');
8044
8929
  this.flowChartVisible = true;
@@ -8255,8 +9140,17 @@ var script$5 = {
8255
9140
  console.error(e);
8256
9141
  res1 = {};
8257
9142
  }
8258
- const nextTaskNode = res1.data || {};
8259
- console.log(nextTaskNode, 'next');
9143
+ let nextTaskNode = res1.data || {};
9144
+
9145
+ // 复杂网关分支:
9146
+ if (res1.code == 200 && !res1.data.evaluation) {
9147
+ this.incomingConditionItemList = [];
9148
+ nextTaskNode.branches = await this.getOutgoingProcessNode(
9149
+ this.absoluteTaskId,
9150
+ res1.data.id
9151
+ );
9152
+ }
9153
+
8260
9154
  if (nextTaskNode.id && !nextTaskNode.setPersonnel) {
8261
9155
  const nodeUserParams = getNodeUserParams(nextTaskNode);
8262
9156
  let res;
@@ -8298,6 +9192,7 @@ var script$5 = {
8298
9192
  this.operationParam.taskInstId = this.absoluteTaskId;
8299
9193
  // this.operationParam.taskDeftId = this.task.activityDefId;
8300
9194
  this.operationParam.nextTaskNode = this.nextTaskNode;
9195
+ this.operationParam.incomingConditionItemList = this.incomingConditionItemList;
8301
9196
  this.operationParam.variables = (this.processData.process || {}).variables || {};
8302
9197
  this.operationParam.extendedProperties = (this.processData.form || {}).extendedProperties || [];
8303
9198
  this.operationParam.taskObj = this.taskObj;
@@ -8397,9 +9292,13 @@ var script$5 = {
8397
9292
  if (res.data) {
8398
9293
  for (let i = 0; i < res.data.length; i++) {
8399
9294
  let o = res.data[i];
8400
- if (o.type != ProcessNodeType.用户任务) {
8401
- o.childNode = await this.getOutgoingProcessNode(taskId, o.id);
8402
- if (o.incomingConditionItemList.length !== 0) ;
9295
+ if (o.incomingConditionItemList && o.incomingConditionItemList.length !== 0) {
9296
+ o.nodeInfoDTO.incomingConditionItemList = o.incomingConditionItemList;
9297
+ console.error(o.incomingConditionItemList, 'o.incomingConditionItemList');
9298
+ this.incomingConditionItemList.push(...o.incomingConditionItemList);
9299
+ }
9300
+ if (o.nodeInfoDTO.nodeType != 'userTask') {
9301
+ o.nodeInfoDTO.branches = await this.getOutgoingProcessNode(taskId, o.nodeInfoDTO.id);
8403
9302
  }
8404
9303
  if (
8405
9304
  res.data[i]["type"] != "endEvent" &&
@@ -8490,53 +9389,120 @@ var script$5 = {
8490
9389
  Message.info("取消操作");
8491
9390
  });
8492
9391
  },
9392
+ getButton(key) {
9393
+ return (this.processData.button || []).find(b => b.buttonKey == key);
9394
+ },
8493
9395
  operBtn() {
8494
9396
  let btnList = [];
8495
- let flag =
8496
- this.taskNode &&
8497
- this.taskNode.length > 0 &&
8498
- this.aftTaskNode.taskState != TaskState.不处理;
9397
+
9398
+ const process = this.processData.process;
9399
+
9400
+ if (!process) {
9401
+ return btnList
9402
+ }
8499
9403
 
8500
9404
  // 加签
8501
- if (flag && !this.isView && this.taskObj.counterSignLabel) {
9405
+ if (process.status == 'todo' && process.isMultiInstance && this.getButton('wf_add_instance')) {
8502
9406
  let obj = {};
8503
- obj.name = this.taskObj.counterSignLabel;
9407
+ obj.name = this.getButton('wf_add_instance').name;
8504
9408
  obj.btnProps = { type: "primary" };
8505
9409
  obj.key = "sign";
8506
9410
  obj.click = () => {
8507
- this.showOperation(__vue_component__$j, obj.name);
9411
+ this.handleUserSelect({
9412
+ type: 'addInstance',
9413
+ checkType: 'checkbox',
9414
+ name: this.getButton('wf_add_instance').name,
9415
+ });
8508
9416
  };
8509
9417
  btnList.push(obj);
8510
9418
  }
9419
+ // if (flag && !this.isView && this.taskObj.counterSignLabel) {
9420
+ // let obj = {};
9421
+ // obj.name = this.taskObj.counterSignLabel;
9422
+ // obj.btnProps = { type: "primary" };
9423
+ // obj.key = "sign";
9424
+ // obj.click = () => {
9425
+ // this.showOperation(operation.counterSign, obj.name);
9426
+ // };
9427
+ // btnList.push(obj);
9428
+ // }
9429
+
8511
9430
  // 转办
8512
- if (flag && !this.isView && this.taskObj.delegateTaskButtonLabel) {
9431
+ if (process.status == 'todo' && this.getButton('wf_transfer')) {
8513
9432
  let obj = {};
8514
- obj.name = this.taskObj.delegateTaskButtonLabel;
9433
+ obj.name = this.getButton('wf_transfer').name;
8515
9434
  obj.key = "delegate";
8516
9435
  obj.click = () => {
8517
- this.showOperation(__vue_component__$h, obj.name);
9436
+ this.handleUserSelect({
9437
+ type: 'transfer',
9438
+ checkType: 'radio',
9439
+ name: this.getButton('wf_transfer').name,
9440
+ });
9441
+ };
9442
+ btnList.push(obj);
9443
+ }
9444
+ // if (flag && !this.isView && this.taskObj.delegateTaskButtonLabel) {
9445
+ // let obj = {};
9446
+ // obj.name = this.taskObj.delegateTaskButtonLabel;
9447
+ // obj.key = "delegate";
9448
+ // obj.click = () => {
9449
+ // this.showOperation(operation.delegateTask, obj.name);
9450
+ // };
9451
+ // btnList.push(obj);
9452
+ // }
9453
+
9454
+ // 委托
9455
+ if (process.status == 'todo' && this.getButton('wf_delegate')) {
9456
+ let obj = {};
9457
+ obj.name = this.getButton('wf_delegate').name;
9458
+ obj.btnProps = { type: "warning" };
9459
+ obj.key = "cc2";
9460
+ obj.click = () => {
9461
+ this.handleUserSelect({
9462
+ type: 'delegate',
9463
+ checkType: 'radio',
9464
+ name: this.getButton('wf_delegate').name
9465
+ });
9466
+ };
9467
+ btnList.push(obj);
9468
+ }
9469
+
9470
+ // 终止
9471
+ if (process.status == 'todo' && this.getButton('wf_terminate')) {
9472
+ let obj = {};
9473
+ obj.name = this.getButton('wf_terminate').name;
9474
+ obj.btnProps = { type: "danger" };
9475
+ obj.key = "cc3";
9476
+ obj.click = () => {
9477
+ this.handleTerminateProcess();
8518
9478
  };
8519
9479
  btnList.push(obj);
8520
9480
  }
9481
+
8521
9482
  // 传阅
8522
- if (flag && !this.isView && this.taskObj.ccTaskButtonLabel) {
9483
+ if (process.status == 'todo' && this.getButton('wf_cctask')) {
8523
9484
  let obj = {};
8524
- obj.name = this.taskObj.ccTaskButtonLabel;
9485
+ obj.name = this.getButton('wf_cctask').name;
8525
9486
  obj.btnProps = { type: "primary" };
8526
9487
  obj.key = "cc";
8527
9488
  obj.click = () => {
8528
- this.showOperation(__vue_component__$a, obj.name);
9489
+ this.handleCirculate(this.getButton('wf_cctask').name);
8529
9490
  };
8530
9491
  btnList.push(obj);
8531
9492
  }
9493
+ // if (flag && !this.isView && this.taskObj.ccTaskButtonLabel) {
9494
+ // let obj = {};
9495
+ // obj.name = this.taskObj.ccTaskButtonLabel;
9496
+ // obj.btnProps = { type: "primary" };
9497
+ // obj.key = "cc";
9498
+ // obj.click = () => {
9499
+ // this.showOperation(operation.ccTask, obj.name);
9500
+ // };
9501
+ // btnList.push(obj);
9502
+ // }
9503
+
8532
9504
  // 催办
8533
- if (
8534
- this.processId &&
8535
- this.processStatus.createTopUserId == this.userId &&
8536
- ((this.taskNode.length > 0 &&
8537
- this.aftTaskNode.taskState != TaskState.抄送) ||
8538
- this.processStatus.status == "审批中")
8539
- ) {
9505
+ if (process.status == 'todo' && this.userId == (process.variables || {}).applyUserId) {
8540
9506
  let obj = {};
8541
9507
  obj.name = "催办";
8542
9508
  // obj.btnProps = { color: "#1389ff" };
@@ -8546,95 +9512,157 @@ var script$5 = {
8546
9512
  };
8547
9513
  btnList.push(obj);
8548
9514
  }
9515
+ // if (
9516
+ // this.processId &&
9517
+ // this.processStatus.createTopUserId == this.userId &&
9518
+ // ((this.taskNode.length > 0 &&
9519
+ // this.aftTaskNode.taskState != $enum.TaskState.抄送) ||
9520
+ // this.processStatus.status == "审批中")
9521
+ // ) {
9522
+ // let obj = {};
9523
+ // obj.name = "催办";
9524
+ // // obj.btnProps = { color: "#1389ff" };
9525
+ // obj.key = "self";
9526
+ // obj.click = () => {
9527
+ // this.handleReminders();
9528
+ // };
9529
+ // btnList.push(obj);
9530
+ // }
9531
+
8549
9532
  // 撤销
8550
9533
  if (
8551
- this.processId &&
8552
- this.processStatus.createTopUserId == this.userId &&
8553
- ((this.taskNode.length > 0 &&
8554
- this.aftTaskNode.taskState != TaskState.抄送) ||
8555
- this.processStatus.status == "审批中")
9534
+ process.isOwner &&
9535
+ process.isReturnable &&
9536
+ !['recall', 'reject'].includes(process.processIsFinished)
8556
9537
  ) {
8557
9538
  let obj = {};
8558
9539
  obj.name = "撤销";
8559
9540
  obj.btnProps = { type: "danger" };
8560
9541
  obj.key = "self";
8561
9542
  obj.click = () => {
8562
- this.handleRevoke();
9543
+ this.handleWithdrawTask('撤销');
8563
9544
  };
8564
9545
  btnList.push(obj);
8565
9546
  }
9547
+
8566
9548
  // if (
8567
- // flag &&
8568
- // !this.isView &&
8569
- // this.taskObj &&
8570
- // this.taskObj.buttons &&
8571
- // this.taskObj.buttons.find((o) => o.label == "退回")
9549
+ // this.processId &&
9550
+ // this.processStatus.createTopUserId == this.userId &&
9551
+ // ((this.taskNode.length > 0 &&
9552
+ // this.aftTaskNode.taskState != $enum.TaskState.抄送) ||
9553
+ // this.processStatus.status == "审批中")
8572
9554
  // ) {
8573
9555
  // let obj = {};
8574
- // obj.name = "退回";
9556
+ // obj.name = "撤销";
8575
9557
  // obj.btnProps = { type: "danger" };
8576
- // obj.key = "back";
9558
+ // obj.key = "self";
8577
9559
  // obj.click = () => {
8578
- // this.showOperation(operation.roolback, obj.name);
9560
+ // this.handleRevoke();
8579
9561
  // };
8580
9562
  // btnList.push(obj);
8581
9563
  // }
8582
9564
 
8583
9565
  // 拒绝
8584
- if (flag && !this.isView && this.processStatus.currUserName) {
9566
+ if (
9567
+ process.status == 'todo' &&
9568
+ this.getButton('wf_reject')
9569
+ ) {
8585
9570
  let obj = {};
8586
- obj.name = "拒绝";
9571
+ obj.name = this.getButton('wf_reject').name;
8587
9572
  obj.btnProps = { type: "danger" };
8588
9573
  obj.key = "refuse";
8589
9574
  obj.click = () => {
8590
- this.showOperation(__vue_component__$d, obj.name);
9575
+ this.handleExamine(false, this.getButton('wf_reject').name);
8591
9576
  };
8592
9577
  btnList.push(obj);
8593
9578
  }
9579
+ // if (flag && !this.isView && this.processStatus.currUserName) {
9580
+ // let obj = {};
9581
+ // obj.name = "拒绝";
9582
+ // obj.btnProps = { type: "danger" };
9583
+ // obj.key = "refuse";
9584
+ // obj.click = () => {
9585
+ // this.showOperation(operation.cancel, obj.name);
9586
+ // };
9587
+ // btnList.push(obj);
9588
+ // }
9589
+
8594
9590
  // 办理
8595
- if (flag && !this.isView && this.taskObj.completeButtonLabel) {
9591
+ if (process.status == 'todo' && this.getButton('wf_pass')) {
8596
9592
  let obj = {};
8597
- obj.name = this.taskObj.completeButtonLabel;
9593
+ obj.name = this.getButton('wf_pass').name;
8598
9594
  obj.btnProps = { type: "primary" };
8599
9595
  obj.key = "complete";
8600
9596
  obj.click = () => {
8601
9597
  if (this.before) {
8602
9598
  this.before().then(() => {
8603
- this.showOperation(__vue_component__$e, obj.name);
9599
+ this.handleExamine(true, this.getButton('wf_pass').name);
8604
9600
  });
8605
9601
  } else {
8606
- this.showOperation(__vue_component__$e, obj.name);
9602
+ this.handleExamine(true, this.getButton('wf_pass').name);
8607
9603
  }
8608
9604
  };
8609
9605
  btnList.push(obj);
8610
9606
  }
9607
+ // if (flag && !this.isView && this.taskObj.completeButtonLabel) {
9608
+ // let obj = {};
9609
+ // obj.name = this.taskObj.completeButtonLabel;
9610
+ // obj.btnProps = { type: "primary" };
9611
+ // obj.key = "complete";
9612
+ // obj.click = () => {
9613
+ // if (this.before) {
9614
+ // this.before().then(() => {
9615
+ // this.showOperation(operation.complete, obj.name);
9616
+ // });
9617
+ // } else {
9618
+ // this.showOperation(operation.complete, obj.name);
9619
+ // }
9620
+ // };
9621
+ // btnList.push(obj);
9622
+ // }
9623
+
8611
9624
  // 退回
8612
9625
  if (
8613
- flag &&
8614
- !this.isView &&
8615
- this.taskObj &&
8616
- this.taskObj.buttons.length > 0
9626
+ process.status == 'todo' &&
9627
+ this.getButton('wf_rollback')
8617
9628
  ) {
8618
- this.taskObj.buttons.map((item) => {
8619
- let obj = {};
8620
- obj.name = item.label;
8621
- if (item.label == "退回") {
8622
- obj.btnProps = { type: "danger" };
8623
- obj.key = "back";
8624
- obj.click = () => {
8625
- this.showOperation(__vue_component__$c, obj.name);
8626
- };
8627
- } else {
8628
- obj.btnProps = {};
8629
- obj.key = item.label;
8630
- obj.click = () => {
8631
- this.clickCustomButton(obj.name);
8632
- };
8633
- }
9629
+ let obj = {};
9630
+ obj.name = this.getButton('wf_rollback').name;
9631
+ obj.btnProps = { type: "danger" };
9632
+ obj.key = "back";
9633
+ obj.click = () => {
9634
+ this.handleRollbackTask(this.getButton('wf_rollback').name);
9635
+ };
9636
+ // 退回可能还有种情况,就是自定义this.clickCustomButton(obj.name);
8634
9637
 
8635
- btnList.unshift(obj);
8636
- });
9638
+ btnList.unshift(obj);
8637
9639
  }
9640
+ // if (
9641
+ // flag &&
9642
+ // !this.isView &&
9643
+ // this.taskObj &&
9644
+ // this.taskObj.buttons.length > 0
9645
+ // ) {
9646
+ // this.taskObj.buttons.map((item) => {
9647
+ // let obj = {};
9648
+ // obj.name = item.label;
9649
+ // if (item.label == "退回") {
9650
+ // obj.btnProps = { type: "danger" };
9651
+ // obj.key = "back";
9652
+ // obj.click = () => {
9653
+ // this.showOperation(operation.roolback, obj.name);
9654
+ // };
9655
+ // } else {
9656
+ // obj.btnProps = {};
9657
+ // obj.key = item.label;
9658
+ // obj.click = () => {
9659
+ // this.clickCustomButton(obj.name);
9660
+ // };
9661
+ // }
9662
+
9663
+ // btnList.unshift(obj);
9664
+ // });
9665
+ // }
8638
9666
 
8639
9667
  return btnList;
8640
9668
  },
@@ -8978,31 +10006,142 @@ var __vue_render__$5 = function () {
8978
10006
  ]
8979
10007
  : _vm._e(),
8980
10008
  _vm._v(" "),
8981
- _c("processBtns", {
8982
- attrs: {
8983
- loading: _vm.submitLoading,
8984
- "button-list": _vm.processData.button,
8985
- userId: _vm.userId,
8986
- process: _vm.processData.process,
8987
- comment: _vm.comment,
8988
- },
8989
- on: {
8990
- draft: function ($event) {
8991
- return _vm.handleDraft({
8992
- taskId: _vm.process.taskId,
8993
- variables: _vm.form,
8994
- })
8995
- },
8996
- examine: _vm.handleExamine,
8997
- "user-select": _vm.handleUserSelect,
8998
- print: _vm.handlePrint,
8999
- rollback: _vm.handleRollbackTask,
9000
- terminate: _vm.handleTerminateProcess,
9001
- withdraw: _vm.handleWithdrawTask,
9002
- reminders: _vm.handleReminders,
9003
- circulate: _vm.handleCirculate,
9004
- },
9005
- }),
10009
+ _vm.isAdditional && _vm.absoluteBtns.outside.length > 0
10010
+ ? _c(
10011
+ "div",
10012
+ {
10013
+ ref: "footBtnRow",
10014
+ staticClass: "footBtnRow foot-item",
10015
+ style: { width: _vm.mainWidth + "px" },
10016
+ },
10017
+ [_vm._t("btn", null, null, _vm.processStatus)],
10018
+ 2
10019
+ )
10020
+ : !_vm.showBtns
10021
+ ? _c("div")
10022
+ : (!_vm.ProcessInsObj.end &&
10023
+ _vm.absoluteBtns.outside.length > 0 &&
10024
+ _vm.processStatus.appId != "com.awspaas.user.apps.root") ||
10025
+ _vm.customBtns.length > 0
10026
+ ? _c(
10027
+ "div",
10028
+ {
10029
+ directives: [
10030
+ {
10031
+ name: "loading",
10032
+ rawName: "v-loading",
10033
+ value: _vm.footBtnLoading,
10034
+ expression: "footBtnLoading",
10035
+ },
10036
+ ],
10037
+ ref: "footBtnRow",
10038
+ staticClass: "footBtnRow foot-item",
10039
+ style: { width: _vm.mainWidth + "px" },
10040
+ },
10041
+ [
10042
+ (_vm.processData.process.status == "todo" ||
10043
+ _vm.customBtns.length > 0) &&
10044
+ _vm.absoluteBtns.outside.length > 0
10045
+ ? [
10046
+ _vm.absoluteBtns.inside.length > 0
10047
+ ? _c(
10048
+ "el-dropdown",
10049
+ {
10050
+ attrs: { placement: "top-start", trigger: "click" },
10051
+ },
10052
+ [
10053
+ _c(
10054
+ "el-button",
10055
+ {
10056
+ staticStyle: { "margin-right": "10px" },
10057
+ attrs: { size: "small" },
10058
+ },
10059
+ [_vm._v(" 更多 ")]
10060
+ ),
10061
+ _vm._v(" "),
10062
+ _c(
10063
+ "el-dropdown-menu",
10064
+ { attrs: { slot: "dropdown" }, slot: "dropdown" },
10065
+ _vm._l(
10066
+ _vm.absoluteBtns.inside,
10067
+ function (item, index) {
10068
+ return _c(
10069
+ "el-dropdown-item",
10070
+ {
10071
+ key: item.name + index,
10072
+ nativeOn: {
10073
+ click: function ($event) {
10074
+ return function () {
10075
+ item.click();
10076
+ _vm.aftClickBtn = item;
10077
+ }.apply(null, arguments)
10078
+ },
10079
+ },
10080
+ },
10081
+ [
10082
+ _c(
10083
+ "el-button",
10084
+ {
10085
+ staticClass: "btn drop-btn",
10086
+ attrs: {
10087
+ type: "text",
10088
+ size: "mini",
10089
+ icon: item.icon,
10090
+ loading: _vm.buttonLoading,
10091
+ },
10092
+ },
10093
+ [
10094
+ _vm._v(
10095
+ "\n " +
10096
+ _vm._s(item.name) +
10097
+ "\n "
10098
+ ),
10099
+ ]
10100
+ ),
10101
+ ],
10102
+ 1
10103
+ )
10104
+ }
10105
+ ),
10106
+ 1
10107
+ ),
10108
+ ],
10109
+ 1
10110
+ )
10111
+ : _vm._e(),
10112
+ _vm._v(" "),
10113
+ _vm._l(_vm.absoluteBtns.outside, function (item) {
10114
+ return _c(
10115
+ "el-button",
10116
+ _vm._b(
10117
+ {
10118
+ key: item.name,
10119
+ attrs: {
10120
+ size: "small",
10121
+ loading: _vm.buttonLoading,
10122
+ },
10123
+ on: {
10124
+ click: function () {
10125
+ item.click();
10126
+ _vm.aftClickBtn = item;
10127
+ },
10128
+ },
10129
+ },
10130
+ "el-button",
10131
+ item.btnProps,
10132
+ false
10133
+ ),
10134
+ [_vm._v("\n " + _vm._s(item.name) + "\n ")]
10135
+ )
10136
+ }),
10137
+ ]
10138
+ : _vm._e(),
10139
+ _vm._v(" "),
10140
+ _vm._t("btnAppend"),
10141
+ ],
10142
+ 2
10143
+ )
10144
+ : _vm._e(),
9006
10145
  _vm._v(" "),
9007
10146
  _c(
9008
10147
  "div",
@@ -9305,11 +10444,11 @@ __vue_render__$5._withStripped = true;
9305
10444
  /* style */
9306
10445
  const __vue_inject_styles__$5 = function (inject) {
9307
10446
  if (!inject) return
9308
- inject("data-v-6c0aa992_0", { source: "@charset \"UTF-8\";\n.operation-box[data-v-6c0aa992] {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n.el-dropdown-menu__item[data-v-6c0aa992] {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text[data-v-6c0aa992] {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text[data-v-6c0aa992] {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item[data-v-6c0aa992]:last-child {\n border: none !important;\n}\n.el-dropdown-menu[data-v-6c0aa992] {\n padding-bottom: 30px;\n}\n.mianContent > .tabs > .demo-tabs[data-v-6c0aa992] > .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n.top-tabs[data-v-6c0aa992] {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n.mianContent[data-v-6c0aa992] {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs[data-v-6c0aa992] {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs[data-v-6c0aa992] .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs[data-v-6c0aa992] .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs[data-v-6c0aa992] .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs[data-v-6c0aa992] .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n.mianContent .rowtitle[data-v-6c0aa992] {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n.mianContent .topCard[data-v-6c0aa992] {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n.mianContent .topCard .topRow[data-v-6c0aa992] {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n.mianContent .topCard .topRow div[data-v-6c0aa992]:first-child {\n color: #333333;\n}\n.mianContent .topCard .topRow div[data-v-6c0aa992]:last-child {\n color: #777777;\n padding-left: 10px;\n}\n.mianContent .topCard .topRow div.process-mliv-dd[data-v-6c0aa992] {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n.mianContent .tabs[data-v-6c0aa992] {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n.mianContent .tabs[data-v-6c0aa992] :deep(.is-active) {\n font-size: 16px;\n}\n.mianContent .tabs[data-v-6c0aa992] :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n.mianContent .topBtnRow[data-v-6c0aa992] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n.mianContent .footBtnRow[data-v-6c0aa992] {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button[data-v-6c0aa992] {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n.formInput[data-v-6c0aa992] {\n width: 90%;\n}\n.dialog[data-v-6c0aa992] :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n.dialog[data-v-6c0aa992] .el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n.dialog[data-v-6c0aa992] :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n.dialog .el-dialog__header[data-v-6c0aa992] {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.dialog[data-v-6c0aa992] :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n.dialog .el-dialog__body[data-v-6c0aa992] {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer[data-v-6c0aa992] {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn[data-v-6c0aa992] {\n top: 10px;\n right: 16px;\n}\n.view-file[data-v-6c0aa992] {\n color: #1389ff;\n cursor: pointer;\n}\n.view-node-info[data-v-6c0aa992] {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n.iconsR[data-v-6c0aa992] {\n cursor: pointer;\n transform: rotate(90deg);\n}\n[data-v-6c0aa992] .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n[data-v-6c0aa992] .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n.sign-img[data-v-6c0aa992] {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */", map: {"version":3,"sources":["index.vue","C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\index.vue"],"names":[],"mappings":"AAAA,gBAAgB;ACw7ChB;EACA,qCAAA;EACA,cAAA;EACA,mBAAA;ADt7CA;ACw7CA;EACA,gBAAA;EACA,gCAAA;ADr7CA;ACs7CA;EACA,sBAAA;ADp7CA;ACu7CA;EACA,yBAAA;ADr7CA;ACw7CA;EACA,uBAAA;ADt7CA;ACy7CA;EACA,oBAAA;ADt7CA;AC27CA;EACA,gBAAA;EACA,UAAA;EACA,sBAAA;EACA,aAAA;ADx7CA;AC87CA;EACA,eAAA;EACA,SAAA;EACA,sBAAA;EACA,UAAA;EACA,aAAA;AD37CA;AC67CA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;EACA,sBAAA;EAIA,4BAAA;AD77CA;AC+7CA;EACA,OAAA;EACA,SAAA;EAEA,aAAA;EACA,sBAAA;AD97CA;AC+7CA;EACA,OAAA;EACA,SAAA;AD77CA;AC87CA;EACA,QAAA;AD57CA;AC+7CA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;AD77CA;AC+7CA;EACA,SAAA;EACA,OAAA;AD77CA;ACo8CA;EACA,sBAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;EAEA,8BAAA;EACA,iBAAA;ADl8CA;ACq8CA;EACA,gBAAA;EACA,kCAAA;ADl8CA;ACq8CA;EACA,aAAA;EACA,0BAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;ADl8CA;ACq8CA;EACA,cAAA;ADl8CA;ACq8CA;EACA,cAAA;EACA,kBAAA;ADl8CA;ACq8CA;EACA,qBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,eAAA;EACA,iBAAA;ADl8CA;ACq8CA;EACA,4BAAA;EACA,SAAA;EACA,OAAA;EACA,4BAAA;EACA,aAAA;EACA,sBAAA;ADl8CA;ACq8CA;EACA,eAAA;ADl8CA;AC08CA;EACA,gBAAA;EACA,MAAA;EACA,sBAAA;EACA,aAAA;ADv8CA;AC88CA;EACA,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,YAAA;AD38CA;AC88CA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,sBAAA;EAEA,eAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EACA,6BAAA;EACA,gBAAA;EACA,sBAAA;EACA,aAAA;AD58CA;AC68CA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;AD38CA;AC+8CA;EACA,UAAA;AD58CA;AC+8CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;AD58CA;AC+8CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,mBAAA;AD58CA;AC+8CA;EACA,aAAA;EACA,kBAAA;AD58CA;AC+8CA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;AD58CA;ACg9CA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;AD78CA;ACi9CA;EACA,kBAAA;AD98CA;ACg9CA;EACA,wBAAA;EACA,kBAAA;AD98CA;ACg9CA;EACA,SAAA;EACA,WAAA;AD98CA;ACi9CA;EACA,cAAA;EACA,eAAA;AD98CA;ACg9CA;EACA,eAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;AD78CA;AC+8CA;EACA,eAAA;EACA,wBAAA;AD58CA;AC+8CA;EACA,cAAA;AD58CA;AC88CA;EACA,gBAAA;AD58CA;AC+8CA;EACA,WAAA;EACA,YAAA;AD58CA;;AAEA,oCAAoC","file":"index.vue","sourcesContent":["@charset \"UTF-8\";\n.operation-box {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n\n.el-dropdown-menu__item {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item:last-child {\n border: none !important;\n}\n\n.el-dropdown-menu {\n padding-bottom: 30px;\n}\n\n.mianContent > .tabs > .demo-tabs > ::v-deep .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n\n.top-tabs {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n\n.mianContent {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n\n.mianContent .rowtitle {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n\n.mianContent .topCard {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n\n.mianContent .topCard .topRow {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n\n.mianContent .topCard .topRow div:first-child {\n color: #333333;\n}\n\n.mianContent .topCard .topRow div:last-child {\n color: #777777;\n padding-left: 10px;\n}\n\n.mianContent .topCard .topRow div.process-mliv-dd {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n\n.mianContent .tabs {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n\n.mianContent .tabs :deep(.is-active) {\n font-size: 16px;\n}\n\n.mianContent .tabs :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n\n.mianContent .topBtnRow {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n\n.mianContent .footBtnRow {\n display: flex;\n justify-content: center;\n align-items: center;\n box-sizing: border-box;\n position: fixed;\n bottom: 0;\n right: 20px;\n height: 50px;\n border-top: 1px solid #dadbde;\n margin-top: 10px;\n background-color: #fff;\n z-index: 1001;\n}\n.mianContent .footBtnRow .el-button {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n\n.formInput {\n width: 90%;\n}\n\n.dialog :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n\n.dialog ::v-deep.el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n\n.dialog :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n\n.dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n\n.dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n\n.dialog .el-dialog__body {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n.view-file {\n color: #1389ff;\n cursor: pointer;\n}\n\n.view-node-info {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n\n.iconsR {\n cursor: pointer;\n transform: rotate(90deg);\n}\n\n::v-deep .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n::v-deep .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n\n.sign-img {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */","<template>\r\n <div\r\n class=\"mianContent\"\r\n v-loading=\"boxLoading && !isButton\"\r\n ref=\"mianContent\"\r\n :style=\"{\r\n // height:\r\n // activeName == '流程图'\r\n // ? '100%'\r\n // : $refs['footBtnRow']\r\n // ? `calc(100% - 50px)`\r\n // : ' 100%',\r\n // overflow: activeName == '流程图' ? 'hidden !important' : 'auto',\r\n }\"\r\n >\r\n <template v-if=\"!isButton\">\r\n <div class=\"tabs\" ref=\"baseTabs\">\r\n <el-tabs\r\n v-model=\"activeName\"\r\n class=\"demo-tabs\"\r\n @tab-click=\"handleClick\"\r\n >\r\n <el-tab-pane\r\n :label=\"item.name\"\r\n :name=\"item.slot || item.name\"\r\n v-for=\"(item, index) in tabs\"\r\n :key=\"index\"\r\n :item=\"item\"\r\n :class=\"['pane-' + item.name]\"\r\n >\r\n <template v-if=\"item.name == '基本信息' && !item.slot\">\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '流程图' && !item.slot\">\r\n <div class=\"view-node-info\" @click=\"getNodeList\">\r\n 查看流程节点信息\r\n </div>\r\n <iframe\r\n v-if=\"trackUrl\"\r\n :src=\"trackUrl\"\r\n style=\"width: 100%; height: 100%; border: none\"\r\n :style=\"{ height: `${iframeHeight}px` }\"\r\n scrolling=\"no\"\r\n frameborder=\"0\"\r\n :key=\"processId\"\r\n ></iframe>\r\n <!-- 展示条件需要同时满足v-if -->\r\n <bpmnLook v-if=\"activeName == '流程图' && processData.process && processData.process.xml\" :approvalData=\"processData.flow\" :diagram=\"processData.process.xml\"></bpmnLook>\r\n <div\r\n v-else\r\n style=\"\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无流程图\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '审批记录' && !item.slot\">\r\n <processFlow v-if=\"activeName == '审批记录' && processData.flow\" :flow-list=\"formatFlow(processData.flow)\"></processFlow>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </template>\r\n <template v-else>\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot\r\n v-if=\"item.slot\"\r\n :name=\"item.slot\"\r\n :taskNode=\"getTaskNode()\"\r\n ></slot>\r\n <slot v-else name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n </el-tab-pane>\r\n <!-- <el-tab-pane label=\"流程图\" name=\"2\" style=\"height: 100%\">\r\n </el-tab-pane> -->\r\n <!-- <el-tab-pane label=\"审批记录\" name=\"3\">\r\n <el-table\r\n :data=\"taskCommentList\"\r\n border\r\n style=\"width: 100%; margin-bottom: 20px\"\r\n v-if=\"taskCommentList && taskCommentList.length > 0\"\r\n >\r\n <el-table-column type=\"index\" width=\"80\" label=\"序号\" />\r\n <el-table-column\r\n prop=\"activityName\"\r\n label=\"节点名称\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"createUserName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"actionName\"\r\n label=\"审批操作\"\r\n ></el-table-column>\r\n <el-table-column prop=\"msg\" label=\"审批意见\">\r\n <template #default=\"scope\">\r\n <div v-html=\"scope.row.msg\"></div>\r\n <el-popover\r\n placement=\"bottom-end\"\r\n :width=\"500\"\r\n trigger=\"click\"\r\n v-if=\"scope.row.metaAnnexList.length > 0\"\r\n >\r\n <template #reference>\r\n <div class=\"view-file\">查看附件</div>\r\n </template>\r\n <ViewFile\r\n v-if=\"scope.row.metaAnnexList\"\r\n :dataList=\"scope.row.metaAnnexList\"\r\n />\r\n </el-popover>\r\n </template>\r\n </el-table-column>\r\n <el-table-column\r\n prop=\"createDate\"\r\n label=\"审批时间\"\r\n ></el-table-column>\r\n </el-table>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </el-tab-pane> -->\r\n </el-tabs>\r\n </div>\r\n </template>\r\n <!-- 底部按钮 -->\r\n <processBtns\r\n :loading=\"submitLoading\"\r\n :button-list=\"processData.button\"\r\n :userId=\"userId\"\r\n :process=\"processData.process\"\r\n :comment=\"comment\"\r\n @draft=\"handleDraft({ taskId: process.taskId, variables: form })\"\r\n @examine=\"handleExamine\"\r\n @user-select=\"handleUserSelect\"\r\n @print=\"handlePrint\"\r\n @rollback=\"handleRollbackTask\"\r\n @terminate=\"handleTerminateProcess\"\r\n @withdraw=\"handleWithdrawTask\"\r\n @reminders=\"handleReminders\"\r\n @circulate=\"handleCirculate\"\r\n ></processBtns>\r\n <div class=\"dialog\">\r\n <el-dialog\r\n :visible.sync=\"dialogVisibleOperation\"\r\n append-to-body\r\n class=\"dialog\"\r\n width=\"600px\"\r\n v-dialogDrag\r\n :title=\"operationLabel\"\r\n :close-on-click-modal=\"false\"\r\n :show-close=\"!isOperLoading\"\r\n :before-close=\"cancelHandlerFn\"\r\n top=\"6vh\" :style=\"dynamicStyle\"\r\n >\r\n <div class=\"operation-box\" ref=\"obRef\">\r\n <component\r\n v-if=\"dialogVisibleOperation\"\r\n ref=\"operationRef\"\r\n :is=\"operationCom\"\r\n :param=\"operationParam\"\r\n @success=\"operationSuccess\"\r\n @fail=\"operationFail\"\r\n :isOperLoading=\"isOperLoading\"\r\n >\r\n <template #form>\r\n <slot :name=\"aftClickBtn.slot\" v-if=\"aftClickBtn.slot\"></slot>\r\n </template>\r\n <template #file>\r\n <el-form\r\n label-width=\"120px\"\r\n status-icon\r\n v-if=\"attachShow\"\r\n @submit.native.prevent\r\n :rules=\"rules\"\r\n >\r\n <el-form-item\r\n label=\"附件\"\r\n :prop=\"attachRule.required ? 'attach' : ''\"\r\n >\r\n <jyr-file-upload\r\n v-model=\"attach\"\r\n :multiple=\"attachRule.limit > 0\"\r\n :limit=\"attachRule.limit\"\r\n fullFileObject\r\n showFileName\r\n ref=\"fileUpload\"\r\n />\r\n </el-form-item>\r\n </el-form>\r\n </template>\r\n </component>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button\r\n v-loading\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n :loading=\"isOperLoading\"\r\n >确 定</el-button\r\n >\r\n <el-button\r\n v-loading\r\n @click=\"cancelHandlerFn\"\r\n :loading=\"isOperLoading\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n <!-- 选择任务 -->\r\n <el-dialog\r\n title=\"选择处理任务\"\r\n :visible.sync=\"showMulTask\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n width=\"500px\"\r\n :show-close=\"false\"\r\n >\r\n <el-form ref=\"form\" label-width=\"100px\" class=\"task\">\r\n <el-form-item label=\"请选择:\" prop=\"content\">\r\n <el-radio-group v-model=\"mulTaskTaskId\" size=\"small\">\r\n <el-radio\r\n v-for=\"item in mulTaskList\"\r\n :key=\"item.nodeId\"\r\n :label=\"item.taskId\"\r\n border\r\n >{{ item.nodeName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"onCheckSure\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n <el-dialog\r\n :visible.sync=\"nodeInfoVisible\"\r\n append-to-body\r\n width=\"600px\"\r\n title=\"流程节点信息\"\r\n :modal=\"false\"\r\n :close-on-click-modal=\"false\"\r\n v-dialogDrag\r\n >\r\n <el-table :data=\"filterFlow(processData.flow)\" border>\r\n <el-table-column\r\n label=\"序号\"\r\n type=\"index\"\r\n width=\"120px\"\r\n ></el-table-column>\r\n <el-table-column prop=\"historyActivityName\" label=\"节点名称\"></el-table-column>\r\n <!-- <el-table-column prop=\"type\" label=\"类型\"></el-table-column> -->\r\n <el-table-column\r\n prop=\"assigneeName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n </el-table>\r\n </el-dialog>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { Message as ElMessage, MessageBox as ElMessageBox } from \"element-ui\";\r\nimport treeselect from \"@riophae/vue-treeselect\";\r\nimport \"@riophae/vue-treeselect/dist/vue-treeselect.css\";\r\nimport api from \"./api\";\r\nimport * as $enum from \"./enum\";\r\nimport staffTree from \"./staff-tree.vue\";\r\nimport ViewFile from \"./view-file.vue\";\r\nimport * as operation from \"./operation/index.js\";\r\nimport JyrFileUpload from \"../JyrFileUpload/index\";\r\nimport processBtns from \"./operation/processBtns.vue\";\r\nimport processFlow from \"./operation/processFlow.vue\";\r\nimport bpmnLook from './bpmnLook.vue';\r\nimport dayjs from \"dayjs\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { bpmnLook, processBtns, processFlow, treeselect, staffTree, ...operation, ViewFile, JyrFileUpload },\r\n props: {\r\n /** 流程实例id */\r\n taskId: {\r\n // require: true,\r\n default: false,\r\n type: String,\r\n },\r\n processId: {\r\n require: true,\r\n default: false,\r\n type: String,\r\n },\r\n // processDefId: {\r\n // require: false,\r\n // default: false,\r\n // type: String,\r\n // },\r\n userId: { require: true, default: \"\", type: String },\r\n // task: {\r\n // default: false,\r\n // type: Object,\r\n // },\r\n showBtns: {\r\n default: true,\r\n type: Boolean,\r\n },\r\n isView: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n getVars: { type: Function },\r\n before: { type: Function },\r\n isAlis: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isAdditional: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n businessData: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n excludeBtn: {\r\n type: String,\r\n default: \"\",\r\n },\r\n showAsPlanned: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showCommIdea: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n commentMsgRequired: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n customBtn: {\r\n default: \"\",\r\n },\r\n tabs: {\r\n default: () => [\r\n {\r\n name: \"基本信息\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"流程图\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"审批记录\",\r\n slot: \"\",\r\n },\r\n ],\r\n },\r\n personType: {\r\n default: \"\",\r\n },\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n isButton: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n provide() {\r\n return {\r\n isAlisInject: this.isAlis,\r\n };\r\n },\r\n // emits: ['update:modelValue', \"getData\", \"change\", \"changeGetData\"],\r\n data() {\r\n return {\r\n // 流程信息\r\n deptId: '',\r\n initProcessData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n processData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n submitLoading: false,\r\n flowChartVisible: false,\r\n comment: null,\r\n // 流程信息\r\n dynamicMaxHeight: '400px',\r\n showMulTask: false,\r\n mulTaskList: [],\r\n mulTaskTaskId: \"\",\r\n attach: [],\r\n customBtns: [],\r\n overheight: 10,\r\n iframeHeight: 500,\r\n mainWidth: 0,\r\n absoluteTaskId: \"\",\r\n infoView: false,\r\n showTopTabs: false,\r\n buttonLoading: false,\r\n footBtnLoading: true,\r\n tabheight: 400,\r\n aftClickBtn: \"\",\r\n attachRule: {\r\n required: true,\r\n limit: 0,\r\n },\r\n nodeInfoVisible: false,\r\n nodeInfoList: [],\r\n jjForm: {\r\n saveMetaAnnexCmdList: [],\r\n },\r\n targetUID: \"\",\r\n commentMsg: \"\",\r\n trackUrl: \"\",\r\n taskObj: {},\r\n taskCommentList: [],\r\n absoluteBtns: { inside: [], outside: [] },\r\n processStatus: \"\",\r\n nextTaskNode: [],\r\n activeName: \"基本信息\",\r\n ProcessInsObj: {},\r\n outGatewayUserTaskModel: [],\r\n dialogVisibleOperation: false,\r\n operationLabel: \"\",\r\n operationCom: {},\r\n operationParam: {},\r\n taskNode: [],\r\n aftTaskNode: {},\r\n operation,\r\n Enum: $enum,\r\n isOperLoading: false,\r\n boxLoading: false,\r\n rules: {\r\n attach: [{ required: true, trigger: \"change\" }],\r\n },\r\n\t noReload: false,\r\n digitalSignatureList: []\r\n };\r\n },\r\n mounted() {\r\n window.onresize = () => {\r\n return (() => {\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n })();\r\n };\r\n },\r\n watch: {\r\n activeName: function (n) {\r\n if (n == 1) this.activeName = \"基本信息\";\r\n },\r\n infoView: function () {\r\n this.calculateHeight();\r\n },\r\n taskId: {\r\n handler(val) {\r\n if (!val) return;\r\n this.absoluteTaskId = val;\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n processId: {\r\n handler(val) {\r\n if (val) {\r\n this.customBtns = [];\r\n this.absoluteBtns = { inside: [], outside: [] };\r\n this.activeName = this.tabs.length > 0 ? this.tabs[0][\"name\"] : \"\";\r\n // 获取流程节点,流程图,流程实例,流程审批\r\n this.getProcessInfo()\r\n if (Date.now()) return;\r\n\r\n api.repository.queryTaskNodeList(this.processId).then((e) => {\r\n\t\t\t if(!this.noReload){\r\n\t\t\t\t this.noReload = false\r\n\t\t\t\t if (!this.absoluteTaskId && e.data.length > 1) {\r\n\t\t\t\t this.mulTaskList = e.data;\r\n\t\t\t\t this.showMulTask = true;\r\n\t\t\t\t return;\r\n\t\t\t\t } else {\r\n\t\t\t\t this.absoluteTaskId =\r\n\t\t\t\t e.data && e.data.length > 0 ? e.data[0][\"taskId\"] : \"\";\r\n\t\t\t\t this.aftTaskNode = e.data[0];\r\n\t\t\t\t }\r\n\t\t\t }\r\n\r\n console.log(\"======\", this.absoluteTaskId);\r\n if (e.code == $enum.apiCode.success) {\r\n this.taskNode = e.data;\r\n api.pis\r\n .getProcessStatus(this.processId, this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.processStatus = res.data;\r\n if (this.absoluteTaskId) {\r\n api.repository\r\n .getUserTaskModelCmd(this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.taskObj = res.data;\r\n this.straightenBtns();\r\n }\r\n });\r\n } else {\r\n this.straightenBtns();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n api.repository\r\n .getTrackUrl({ processInstId: val, type: $enum.SourceType.电脑端 })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n }\r\n });\r\n api.tis.getTaskCommentList(this.processId, \"\").then((res) => {\r\n this.taskCommentList = res.data;\r\n this.digitalSignatureList = res.data.filter(item => item.digitalSignature).map(item => item.digitalSignature)\r\n });\r\n api.pis.getProcessInstanceById(this.processId).then((res) => {\r\n this.ProcessInsObj = res.data;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n });\r\n });\r\n\r\n // api.repository.queryTaskNodeList(this.processId).then((res) => {\r\n // if (res.code == $enum.apiCode.success) this.taskNode = res.data;\r\n // });\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n absoluteTaskId: {\r\n handler(val) {\r\n if (val) {\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n dialogVisibleOperation: {\r\n handler(val) {\r\n this.$emit(\"show-modal\", val);\r\n },\r\n },\r\n },\r\n methods: {\r\n // 流程\r\n formatFlow(flow) {\r\n const newFlow = (flow || []).map(item => {\r\n return {\r\n ...item,\r\n attachmentsFujian: (item.attachments || []).filter(i => i.type != 'signature'),\r\n attachmentsQianzi: (item.attachments || []).filter(i => i.type == 'signature'),\r\n }\r\n })\r\n return newFlow\r\n },\r\n cancelHandlerFn(){\r\n this.dialogVisibleOperation = false\r\n this.submitLoading = false\r\n },\r\n filterFlow(flowArr) {\r\n return flowArr.filter((item) => {\r\n return ['userTask', 'candidate'].includes(item.historyActivityType)\r\n });\r\n },\r\n getProcessInfo() {\r\n this.submitLoading = true\r\n this.boxLoading = true;\r\n\r\n api.tis.getTaskModelDetail(this.taskId ? {\r\n processInstId: this.processId,\r\n taskId: this.taskId,\r\n } : {\r\n processInstId: this.processId,\r\n }).then(async res => {\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, 'id')\r\n\r\n console.log(this.processData.flow, 'flw')\r\n this.flowChartVisible = true\r\n this.submitLoading = false\r\n this.boxLoading = false\r\n }\r\n })\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n handleDraft() {\r\n this.submitLoading = true;\r\n },\r\n // 提交(办理)true、取消申请 false\r\n handleExamine(flag, name) {\r\n console.log(flag, 'flag')\r\n if (flag) {\r\n this.handlePass(name)\r\n } else {\r\n this.handleCancel(name)\r\n }\r\n this.submitLoading = true;\r\n },\r\n // 办理\r\n async handlePass(name) {\r\n if (this.deptId) {\r\n await this.getNextNode(this.deptId)\r\n }\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, name);\r\n }\r\n },\r\n // 取消申请\r\n handleCancel(name) {\r\n this.showOperation(operation.cancel, name);\r\n },\r\n // 转办transfer,委托delegate,addInstance\r\n handleUserSelect({ type, checkType, name}) {\r\n if (type == 'transfer') {\r\n this.handleTransfer(name)\r\n }\r\n else if (type == 'addInstance') {\r\n this.handleAddInstance(name)\r\n }\r\n console.log('handleUserselect')\r\n },\r\n // 转办\r\n handleTransfer(name) {\r\n this.showOperation(operation.delegateTask, name);\r\n },\r\n // 加签\r\n handleAddInstance(name) {\r\n this.showOperation(operation.counterSign, name);\r\n },\r\n handlePrint() {\r\n console.log('handlePrint')\r\n },\r\n handleRollbackTask(name) {\r\n console.log('handleRollbackTask')\r\n this.showOperation(operation.roolback, name);\r\n },\r\n handleTerminateProcess() {\r\n console.log('handleTerminateProcess')\r\n },\r\n // 传阅\r\n handleCirculate(name) {\r\n console.log('handleCirculate')\r\n this.showOperation(operation.ccTask, name);\r\n },\r\n // 撤销,撤回\r\n handleWithdrawTask(name) {\r\n console.log('handleWithdrawTask')\r\n this.handleRevoke();\r\n // this.showOperation(operation.withdrawTask, '请选择撤销/撤回操作');\r\n },\r\n // 流程\r\n findTargetHtml(startNode, targetClass, searchKey = 'parentElement') {\r\n\t\t\t\tif (!startNode) return null\r\n \t\t\tif (startNode.classList.contains(targetClass)) {\r\n \t\t\treturn startNode\r\n \t\t\t}\r\n \t\t\tlet curEl = startNode[searchKey]\r\n \t\t\tif (!curEl) return null\r\n \t\t\tif (searchKey == 'children') {\r\n \t\t\tfor (let i = 0; i <= curEl.length - 1; i++) {\r\n \t\t\tif (curEl[i].classList.contains(targetClass)) {\r\n \t\t\treturn curEl[i]\r\n \t\t\t}\r\n \t\t\t}\r\n \t\t\treturn\r\n \t\t\t}\r\n \t\t\treturn this.findTargetHtml(curEl, targetClass)\r\n\t\t\t},\r\n findImageIndex(item){\r\n return item ? this.digitalSignatureList.findIndex(i => i == item) : -1\r\n },\r\n onCheckSure() {\r\n this.absoluteTaskId = this.mulTaskTaskId;\r\n this.mulTaskList.map((item) => {\r\n if (item.taskId == this.mulTaskTaskId) {\r\n this.aftTaskNode = item;\r\n }\r\n });\r\n\t this.noReload = true\r\n this.showMulTask = false;\r\n this.footBtnLoading = true;\r\n let temp = this.processId;\r\n this.processId = \"\";\r\n this.processId = temp;\r\n },\r\n showButtonLoading() {\r\n this.buttonLoading = true;\r\n },\r\n hideButtonLoading() {\r\n this.buttonLoading = false;\r\n },\r\n calculateHeight() {\r\n let h = 0;\r\n if (this.$refs[\"footBtnRow\"]) {\r\n h += this.$refs[\"footBtnRow\"].offsetHeight;\r\n }\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n if (this.infoView && this.absoluteBtns.outside.length > 0) {\r\n h += 32;\r\n }\r\n if (this.$refs[\"infoBoxFign\"]) {\r\n let windowHeight =\r\n window.innerHeight ||\r\n document.documentElement.clientHeight ||\r\n document.body.clientHeight;\r\n this.tabheight =\r\n windowHeight - this.$refs[\"infoBoxFign\"].offsetTop - 192;\r\n }\r\n this.overheight = h + 116;\r\n this.iframeHeight = this.$refs[\"mianContent\"].offsetHeight - 146;\r\n },\r\n getNodeList() {\r\n this.nodeInfoVisible = true;\r\n // api.pis.findNodeParticipantRows(this.processId).then((e) => {\r\n \r\n // e.data.map((item) => {\r\n // if (item.type == \"串签\" || item.type == \"并签\") {\r\n // item[\"name\"] += `【${item.type}】`;\r\n // }\r\n // });\r\n // this.nodeInfoList = e.data;\r\n // });\r\n },\r\n fileNameLastof(e, len = 0) {\r\n if (e.indexOf(\"http\") == -1) len = 0;\r\n if (!e) return;\r\n let last = \"/\";\r\n if (e.indexOf(\"\\\\\") != -1) {\r\n last = \"\\\\\";\r\n }\r\n //整理文件名\r\n let filename = e;\r\n let lastindex = filename.lastIndexOf(last);\r\n return filename.substr(lastindex + 1 + len, filename.length);\r\n },\r\n clickCustomButton(name) {\r\n this.$emit(\"clickCustomButton\", {\r\n name,\r\n processStatus: this.processStatus,\r\n setName: (label) => {\r\n this.taskObj.buttons.map((item) => {\r\n if (item.label == name) {\r\n item.label = label;\r\n }\r\n });\r\n this.straightenBtns();\r\n },\r\n });\r\n },\r\n // 获取下一个节点数据\r\n async getNextNode(deptId) {\r\n let res1\r\n try {\r\n res1 = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n );\r\n } catch (e) {\r\n console.error(e)\r\n res1 = {}\r\n }\r\n const nextTaskNode = res1.data || {};\r\n console.log(nextTaskNode, 'next')\r\n if (nextTaskNode.id && !nextTaskNode.setPersonnel) {\r\n const nodeUserParams = getNodeUserParams(nextTaskNode)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n // 需要传入部门id\r\n deptId: deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == $enum.apiCode.success) {\r\n nextTaskNode.userList = res.data\r\n }\r\n }\r\n this.nextTaskNode = nextTaskNode\r\n console.log(nextTaskNode, 'getNextNode')\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n async showOperation(com, label) {\r\n this.attach = [];\r\n if (false && this.processStatus.allUserNames.length > 0) {\r\n if (this.absoluteTaskId) {\r\n let vars;\r\n if (this.getVars) {\r\n vars = this.getVars();\r\n if (vars === false) {\r\n return false;\r\n }\r\n }\r\n let res = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n vars\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n for (var i in res.data) {\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"固定账户\" ||\r\n res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(this.absoluteTaskId, [\r\n res.data[i].id,\r\n ])\r\n .then((e) => {\r\n res.data[i].userTaskModelDTO.routeTxt[\"userNames\"] =\r\n e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n this.nextTaskNode = res.data;\r\n } else {\r\n this.nextTaskNode = [];\r\n this.outGatewayUserTaskModel = await this.getOutgoingProcessNode(\r\n this.absoluteTaskId,\r\n \"\"\r\n );\r\n }\r\n }\r\n }\r\n this.operationLabel = label;\r\n // this.operationParam = new operation.PorpParam(\"\", this.processId, this.processDefId, this.task.id, this.task.activityDefId);\r\n this.operationParam.processInstId = this.processId;\r\n // this.operationParam.processDefId = this.processDefId;\r\n this.operationParam.taskInstId = this.absoluteTaskId;\r\n // this.operationParam.taskDeftId = this.task.activityDefId;\r\n this.operationParam.nextTaskNode = this.nextTaskNode;\r\n this.operationParam.variables = (this.processData.process || {}).variables || {}\r\n this.operationParam.extendedProperties = (this.processData.form || {}).extendedProperties || []\r\n this.operationParam.taskObj = this.taskObj;\r\n this.operationParam.getVars = this.getVars;\r\n this.operationParam.outGatewayUserTaskModel =\r\n this.outGatewayUserTaskModel;\r\n this.operationParam.taskNode = this.getTaskNode();\r\n this.operationParam.businessData = this.businessData;\r\n this.operationParam.showAsPlanned = this.showAsPlanned;\r\n this.operationParam.showCommIdea = this.showCommIdea;\r\n this.operationParam.commentMsgRequired = this.commentMsgRequired;\r\n this.operationParam.personType = this.personType;\r\n this.operationParam.personEntity = {\r\n ...this.personEntity,\r\n ...(this.aftClickBtn.personEntity || {}),\r\n };\r\n this.operationParam.ProcessInsObj = this.ProcessInsObj;\r\n this.operationCom = com;\r\n this.dialogVisibleOperation = true;\r\n this.$nextTick(() => {\r\n \t\tlet ctnEl = this.$refs.obRef\r\n\t\t\t\tconsole.log(ctnEl, this.$refs);\r\n \t\tif (!ctnEl) return \r\n \t\tlet topDistance = ctnEl.getBoundingClientRect().top\r\n \t\tlet dialogEl = this.findTargetHtml(ctnEl, 'el-dialog')\r\n \t\tlet dialogFootEl = this.findTargetHtml(dialogEl, 'el-dialog__footer', 'children')\r\n \t\t// 视口高度 - margin - head - footer\r\n \t\tlet val = window.innerHeight - topDistance - topDistance - dialogFootEl.clientHeight - 32\r\n \t\tthis.dynamicMaxHeight = `${val}px`\r\n \t\t})\r\n },\r\n onClickOperation() {\r\n if (\r\n this.attachShow &&\r\n this.attachRule.required &&\r\n this.attach.length == 0\r\n ) {\r\n return ElMessage.error(\"请上传附件\");\r\n }\r\n if (this.aftClickBtn.preposition) {\r\n this.operationMain(this.aftClickBtn.preposition);\r\n } else {\r\n this.operationMain();\r\n }\r\n\r\n // if (this.$refs[\"fileUpload\"] && this.$refs[\"fileUpload\"].getLoading()) {\r\n // return ElMessage.error(\"请等待附件上传完成后重试\");\r\n // }\r\n },\r\n operationMain(preposition = false) {\r\n let saveMetaAnnexCmdList\r\n if (this.attachShow) {\r\n saveMetaAnnexCmdList = [];\r\n this.attach.map((item) => {\r\n saveMetaAnnexCmdList.push({\r\n id: item.id,\r\n name: this.fileNameLastof(item.name),\r\n size: item.fileSize,\r\n format: item.fileType,\r\n url: item.url,\r\n uploadTime: item.createTime,\r\n processInstId: this.operationParam.processInstId,\r\n taskInstId: this.operationParam.taskInstId,\r\n });\r\n });\r\n saveMetaAnnexCmdList = saveMetaAnnexCmdList.sort((a, b) => {\r\n return dayjs(a.uploadTime).valueOf() > dayjs(b.uploadTime).valueOf();\r\n });\r\n // api.tis.patchSave({\r\n // saveMetaAnnexCmdList,\r\n // });\r\n }\r\n\r\n if (this.$refs.operationRef) {\r\n this.$refs.operationRef.confirm(preposition, () => {\r\n this.isOperLoading = true;\r\n }, saveMetaAnnexCmdList);\r\n }\r\n },\r\n operationSuccess(isComplete = true) {\r\n ElMessage.success(\"操作成功\");\r\n this.dialogVisibleOperation = false;\r\n // router.go(0);\r\n if (isComplete) this.$emit(\"Complete\");\r\n this.isOperLoading = false;\r\n },\r\n operationFail(msg = \"\") {\r\n msg && ElMessage.warning(msg);\r\n this.isOperLoading = false;\r\n },\r\n async getOutgoingProcessNode(taskId, processNodeId) {\r\n let res = await api.repository.getOutgoingProcessNode(\r\n taskId,\r\n processNodeId\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n if (res.data) {\r\n for (let i = 0; i < res.data.length; i++) {\r\n let o = res.data[i];\r\n if (o.type != $enum.ProcessNodeType.用户任务) {\r\n o.childNode = await this.getOutgoingProcessNode(taskId, o.id);\r\n if (o.incomingConditionItemList.length !== 0) {\r\n // o.childNode.push(o);\r\n }\r\n }\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].humanPerformerName == \"固定账户\" ||\r\n res.data[i].humanPerformerName == \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(taskId, [res.data[i].id])\r\n .then((e) => {\r\n res.data[i][\"routeTxt\"][\"userNames\"] = e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n if (res.data.length == 0) {\r\n res.data.push({\r\n id: \"\",\r\n incomingConditionItemList: [],\r\n type: \"endEvent\",\r\n name: \"结束事件\",\r\n });\r\n }\r\n }\r\n return res.data;\r\n }\r\n return [];\r\n },\r\n getColor(status) {\r\n if (status == \"审核中\" || status == \"审批中\") return \"#6DC743\";\r\n if (status == \"已驳回\") return \"#F14B4C\";\r\n if (status == \"已撤销\") return \"#CECECE\";\r\n if (status == \"已完成\") return \"#6DC743\";\r\n\r\n return \"#1389FF\";\r\n },\r\n handleClick(e) {\r\n this.$emit(\"clickTab\",JSON.parse(JSON.stringify(e.$vnode.data.attrs.item)));\r\n },\r\n getTaskNode() {\r\n if (this.taskNode.filter)\r\n return this.taskNode.filter((o) => {\r\n return o.nodeId == this.taskObj.id;\r\n });\r\n return [];\r\n },\r\n handleRevoke() {\r\n ElMessageBox.confirm(`确定撤销吗`, \"撤销\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis\r\n .withdrawTask(this.processData.process.processInstanceId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch(() => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n handleReminders() {\r\n console.log(ElMessageBox);\r\n ElMessageBox.confirm(`确定催办吗`, \"催办\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis.reminders(this.processData.process.processInstanceId).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch((e) => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n operBtn() {\r\n let btnList = [];\r\n let flag =\r\n this.taskNode &&\r\n this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.不处理;\r\n\r\n // 加签\r\n if (flag && !this.isView && this.taskObj.counterSignLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.counterSignLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"sign\";\r\n obj.click = () => {\r\n this.showOperation(operation.counterSign, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 转办\r\n if (flag && !this.isView && this.taskObj.delegateTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.delegateTaskButtonLabel;\r\n obj.key = \"delegate\";\r\n obj.click = () => {\r\n this.showOperation(operation.delegateTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 传阅\r\n if (flag && !this.isView && this.taskObj.ccTaskButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.ccTaskButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"cc\";\r\n obj.click = () => {\r\n this.showOperation(operation.ccTask, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 催办\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"催办\";\r\n // obj.btnProps = { color: \"#1389ff\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleReminders();\r\n };\r\n btnList.push(obj);\r\n }\r\n // 撤销\r\n if (\r\n this.processId &&\r\n this.processStatus.createTopUserId == this.userId &&\r\n ((this.taskNode.length > 0 &&\r\n this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n this.processStatus.status == \"审批中\")\r\n ) {\r\n let obj = {};\r\n obj.name = \"撤销\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleRevoke();\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (\r\n // flag &&\r\n // !this.isView &&\r\n // this.taskObj &&\r\n // this.taskObj.buttons &&\r\n // this.taskObj.buttons.find((o) => o.label == \"退回\")\r\n // ) {\r\n // let obj = {};\r\n // obj.name = \"退回\";\r\n // obj.btnProps = { type: \"danger\" };\r\n // obj.key = \"back\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.roolback, obj.name);\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 拒绝\r\n if (flag && !this.isView && this.processStatus.currUserName) {\r\n let obj = {};\r\n obj.name = \"拒绝\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"refuse\";\r\n obj.click = () => {\r\n this.showOperation(operation.cancel, obj.name);\r\n };\r\n btnList.push(obj);\r\n }\r\n // 办理\r\n if (flag && !this.isView && this.taskObj.completeButtonLabel) {\r\n let obj = {};\r\n obj.name = this.taskObj.completeButtonLabel;\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"complete\";\r\n obj.click = () => {\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, obj.name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, obj.name);\r\n }\r\n };\r\n btnList.push(obj);\r\n }\r\n // 退回\r\n if (\r\n flag &&\r\n !this.isView &&\r\n this.taskObj &&\r\n this.taskObj.buttons.length > 0\r\n ) {\r\n this.taskObj.buttons.map((item) => {\r\n let obj = {};\r\n obj.name = item.label;\r\n if (item.label == \"退回\") {\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"back\";\r\n obj.click = () => {\r\n this.showOperation(operation.roolback, obj.name);\r\n };\r\n } else {\r\n obj.btnProps = {};\r\n obj.key = item.label;\r\n obj.click = () => {\r\n this.clickCustomButton(obj.name);\r\n };\r\n }\r\n\r\n btnList.unshift(obj);\r\n });\r\n }\r\n\r\n return btnList;\r\n },\r\n straightenBtns(flag = true) {\r\n let list = [];\r\n\r\n if (this.excludeBtn) {\r\n this.operBtn().map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n } else {\r\n list = this.operBtn();\r\n }\r\n if (this.customBtns.length > 0) {\r\n list = [];\r\n this.customBtns.map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n }\r\n\r\n let r = {\r\n outside: [],\r\n inside: [],\r\n };\r\n if (list.length > 4) {\r\n r.outside = list.splice(list.length - 4, list.length - 1);\r\n r.inside = list;\r\n } else {\r\n r.outside = list;\r\n }\r\n\r\n if (flag && this.customBtn) {\r\n this.customBtn(\r\n { btnList: this.operBtn(), processStatus: this.processStatus },\r\n (e) => {\r\n this.customBtns = e;\r\n this.straightenBtns(false);\r\n },\r\n () => {\r\n this.$emit(\"Complete\");\r\n }\r\n );\r\n console.log(\"=======333\");\r\n } else {\r\n this.absoluteBtns = r;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n this.footBtnLoading = false;\r\n this.boxLoading = false;\r\n });\r\n }\r\n },\r\n },\r\n computed: {\r\n dynamicStyle() {\r\n \t\t\treturn { '--dynamic-ctx-height': this.dynamicMaxHeight }\r\n\t\t\t},\r\n attachShow() {\r\n const extendedProperties = (this.processData.form || {}).extendedProperties || []\r\n\r\n let sign = false;\r\n let fd;\r\n let annex = \"\";\r\n console.error(this.operationLabel, 'operationLabel')\r\n switch (this.operationLabel) {\r\n case \"退回\":\r\n // annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'otherButtonAnnexList'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"通过\":\r\n case \"办理\":\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'completeButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"处理\":\r\n // annex = this.operationParam.taskObj.completeButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'completeButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"同意\":\r\n // annex = this.operationParam.taskObj.completeButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'completeButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"拒绝\":\r\n // annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'otherButtonAnnexList'\r\n })\r\n annex = fd ? fd.value : ''\r\n break;\r\n case \"加签\":\r\n // annex = this.operationParam.taskObj.counterSignButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'counterSignButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"转办\":\r\n // annex = this.operationParam.taskObj.delegateTaskButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'delegateTaskButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n }\r\n // 校验自定义按钮\r\n let temp = \"\";\r\n if (typeof annex != \"string\" && annex != null) {\r\n annex.map((item) => {\r\n if (item.indexOf(this.operationLabel) != -1) {\r\n sign = true;\r\n temp = item;\r\n }\r\n });\r\n }\r\n if (temp) annex = temp;\r\n\r\n // 解析数据\r\n if (sign) {\r\n const annexArr = annex.split(\":\");\r\n this.attachRule.required = annexArr[1] == \"true\" ? true : false;\r\n this.attachRule.limit =\r\n annexArr[2] == -1 ? 999 : annexArr[2];\r\n }\r\n return sign;\r\n },\r\n },\r\n};\r\n</script>\r\n<!-- <style >\r\n.demo-tabs {\r\n position: relative;\r\n .el-tabs__header {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n}\r\n</style> -->\r\n\r\n<style scoped lang=\"scss\">\r\n.operation-box {\r\n max-height: var(--dynamic-ctx-height);\r\n overflow: auto;\r\n padding-right: 20px;\r\n}\r\n.el-dropdown-menu__item {\r\n min-width: 140px;\r\n border-bottom: 1px solid #e8e8e8;\r\n .el-button--text {\r\n color: #333 !important;\r\n }\r\n &:hover {\r\n .el-button--text {\r\n color: #1389ff !important;\r\n }\r\n }\r\n &:last-child {\r\n border: none !important;\r\n }\r\n}\r\n.el-dropdown-menu {\r\n padding-bottom: 30px;\r\n}\r\n.mianContent {\r\n & > .tabs {\r\n & > .demo-tabs {\r\n & > ::v-deep .el-tabs__header {\r\n position: sticky;\r\n top: -20px;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.top-tabs {\r\n position: fixed;\r\n top: 62px;\r\n background-color: #fff;\r\n right: 0px;\r\n z-index: 1997;\r\n}\r\n.mianContent {\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n // margin-top: 20px;\r\n // padding-top: 20px;\r\n // width: 100%;\r\n /* // margin-bottom: 10px; */\r\n // overflow: hidden;\r\n .demo-tabs {\r\n flex: 1;\r\n height: 0;\r\n // height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n ::v-deep .el-tabs__content {\r\n flex: 1;\r\n height: 0;\r\n &::-webkit-scrollbar {\r\n width: 0;\r\n }\r\n }\r\n ::v-deep .el-tab-pane {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n &.pane-流程图 {\r\n .bpmn-look {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.mianContent .rowtitle {\r\n /* margin-top: 24px; */\r\n margin-bottom: 16px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n border-left: 4px solid #1389ff;\r\n padding-left: 9px;\r\n}\r\n\r\n.mianContent .topCard {\r\n overflow: hidden;\r\n /* // border: 1px solid #DADBDE; */\r\n}\r\n\r\n.mianContent .topCard .topRow {\r\n display: flex;\r\n /* // line-height: 46px; */\r\n font-size: 14px;\r\n font-weight: 400;\r\n line-height: 32px;\r\n}\r\n\r\n.mianContent .topCard .topRow div:first-child {\r\n color: #333333;\r\n}\r\n\r\n.mianContent .topCard .topRow div:last-child {\r\n color: #777777;\r\n padding-left: 10px;\r\n}\r\n\r\n.mianContent .topCard .topRow div.process-mliv-dd {\r\n /* // height: 26px; */\r\n min-width: 30px;\r\n padding: 0px 16px;\r\n border-radius: 4px;\r\n background: #1389ff;\r\n color: #fff;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n margin-left: 10px;\r\n}\r\n\r\n.mianContent .tabs {\r\n /* // margin-bottom: 60px; */\r\n height: 0;\r\n flex: 1;\r\n overflow: visible !important;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.mianContent .tabs :deep(.is-active) {\r\n font-size: 16px;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content) {\r\n// height: calc(100% - 55px);\r\n// /* 修改BUGID:1003401 */\r\n// overflow: auto;\r\n// }\r\n.mianContent .tabs :deep(.el-tabs__header) {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content)::-webkit-scrollbar {\r\n// width: 0;\r\n// }\r\n\r\n.mianContent .topBtnRow {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n height: 100%;\r\n}\r\n\r\n.mianContent .footBtnRow {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n box-sizing: border-box;\r\n // height: 100%;\r\n position: fixed;\r\n bottom: 0;\r\n right: 20px;\r\n height: 50px;\r\n border-top: 1px solid #dadbde;\r\n margin-top: 10px;\r\n background-color: #fff;\r\n z-index: 1001;\r\n .el-button {\r\n min-width: 74px;\r\n height: 36px;\r\n border-radius: 6px;\r\n }\r\n}\r\n\r\n.formInput {\r\n width: 90%;\r\n}\r\n\r\n.dialog :deep(.el-dialog__header) {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n}\r\n\r\n.dialog ::v-deep.el-dialog__body {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n padding-right: 10px;\r\n}\r\n\r\n.dialog :deep(.el-dialog__footer) {\r\n padding: 12px;\r\n text-align: center;\r\n}\r\n.dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n}\r\n\r\n.dialog {\r\n .el-dialog__body {\r\n padding: 45px 30px;\r\n }\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n.view-file {\r\n color: #1389ff;\r\n cursor: pointer;\r\n}\r\n.view-node-info {\r\n cursor: pointer;\r\n color: #1389ff;\r\n margin-left: 34px;\r\n font-size: 16px;\r\n}\r\n.iconsR {\r\n cursor: pointer;\r\n transform: rotate(90deg);\r\n}\r\n::v-deep .task .el-radio-group {\r\n .el-radio--small.is-bordered {\r\n margin: 0 20px;\r\n }\r\n .el-radio.is-bordered + .el-radio.is-bordered {\r\n margin: 5px 20px;\r\n }\r\n}\r\n.sign-img {\r\n width: 60px;\r\n height: 60px;\r\n}\r\n</style>\r\n"]}, media: undefined });
10447
+ inject("data-v-6177206d_0", { source: "@charset \"UTF-8\";\n.operation-box[data-v-6177206d] {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n.el-dropdown-menu__item[data-v-6177206d] {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text[data-v-6177206d] {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text[data-v-6177206d] {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item[data-v-6177206d]:last-child {\n border: none !important;\n}\n.el-dropdown-menu[data-v-6177206d] {\n padding-bottom: 30px;\n}\n.mianContent > .tabs > .demo-tabs[data-v-6177206d] > .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n.top-tabs[data-v-6177206d] {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n.mianContent[data-v-6177206d] {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs[data-v-6177206d] {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs[data-v-6177206d] .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs[data-v-6177206d] .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs[data-v-6177206d] .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs[data-v-6177206d] .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n.mianContent .rowtitle[data-v-6177206d] {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n.mianContent .topCard[data-v-6177206d] {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n.mianContent .topCard .topRow[data-v-6177206d] {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n.mianContent .topCard .topRow div[data-v-6177206d]:first-child {\n color: #333333;\n}\n.mianContent .topCard .topRow div[data-v-6177206d]:last-child {\n color: #777777;\n padding-left: 10px;\n}\n.mianContent .topCard .topRow div.process-mliv-dd[data-v-6177206d] {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n.mianContent .tabs[data-v-6177206d] {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n.mianContent .tabs[data-v-6177206d] :deep(.is-active) {\n font-size: 16px;\n}\n.mianContent .tabs[data-v-6177206d] :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n.mianContent .topBtnRow[data-v-6177206d] {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n.mianContent .footBtnRow[data-v-6177206d] {\n z-index: 1001;\n width: 100%;\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n.mianContent .footBtnRow .el-button[data-v-6177206d] {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n.formInput[data-v-6177206d] {\n width: 90%;\n}\n.dialog[data-v-6177206d] :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n.dialog[data-v-6177206d] .el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n.dialog[data-v-6177206d] :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n.dialog .el-dialog__header[data-v-6177206d] {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.dialog[data-v-6177206d] :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n.dialog .el-dialog__body[data-v-6177206d] {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer[data-v-6177206d] {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn[data-v-6177206d] {\n top: 10px;\n right: 16px;\n}\n.view-file[data-v-6177206d] {\n color: #1389ff;\n cursor: pointer;\n}\n.view-node-info[data-v-6177206d] {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n.iconsR[data-v-6177206d] {\n cursor: pointer;\n transform: rotate(90deg);\n}\n[data-v-6177206d] .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n[data-v-6177206d] .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n.sign-img[data-v-6177206d] {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */", map: {"version":3,"sources":["index.vue","C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\index.vue"],"names":[],"mappings":"AAAA,gBAAgB;ACwpDhB;EACA,qCAAA;EACA,cAAA;EACA,mBAAA;ADtpDA;ACwpDA;EACA,gBAAA;EACA,gCAAA;ADrpDA;ACspDA;EACA,sBAAA;ADppDA;ACupDA;EACA,yBAAA;ADrpDA;ACwpDA;EACA,uBAAA;ADtpDA;ACypDA;EACA,oBAAA;ADtpDA;AC2pDA;EACA,gBAAA;EACA,UAAA;EACA,sBAAA;EACA,aAAA;ADxpDA;AC8pDA;EACA,eAAA;EACA,SAAA;EACA,sBAAA;EACA,UAAA;EACA,aAAA;AD3pDA;AC6pDA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;EACA,sBAAA;EAIA,4BAAA;AD7pDA;AC+pDA;EACA,OAAA;EACA,SAAA;EAEA,aAAA;EACA,sBAAA;AD9pDA;AC+pDA;EACA,OAAA;EACA,SAAA;AD7pDA;AC8pDA;EACA,QAAA;AD5pDA;AC+pDA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;AD7pDA;AC+pDA;EACA,SAAA;EACA,OAAA;AD7pDA;ACoqDA;EACA,sBAAA;EACA,mBAAA;EACA,eAAA;EACA,iBAAA;EAEA,8BAAA;EACA,iBAAA;ADlqDA;ACqqDA;EACA,gBAAA;EACA,kCAAA;ADlqDA;ACqqDA;EACA,aAAA;EACA,0BAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;ADlqDA;ACqqDA;EACA,cAAA;ADlqDA;ACqqDA;EACA,cAAA;EACA,kBAAA;ADlqDA;ACqqDA;EACA,qBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,eAAA;EACA,iBAAA;ADlqDA;ACqqDA;EACA,4BAAA;EACA,SAAA;EACA,OAAA;EACA,4BAAA;EACA,aAAA;EACA,sBAAA;ADlqDA;ACqqDA;EACA,eAAA;ADlqDA;AC0qDA;EACA,gBAAA;EACA,MAAA;EACA,sBAAA;EACA,aAAA;ADvqDA;AC8qDA;EACA,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,YAAA;AD3qDA;AC8qDA;EAaA,aAAA;EAEA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,wBAAA;EACA,gBAAA;EACA,mDAAA;EACA,2CAAA;ADxrDA;ACyrDA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;ADvrDA;ACgtDA;EACA,UAAA;AD7sDA;ACgtDA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;AD7sDA;ACgtDA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,mBAAA;AD7sDA;ACgtDA;EACA,aAAA;EACA,kBAAA;AD7sDA;ACgtDA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;AD7sDA;ACitDA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;AD9sDA;ACktDA;EACA,kBAAA;AD/sDA;ACitDA;EACA,wBAAA;EACA,kBAAA;AD/sDA;ACitDA;EACA,SAAA;EACA,WAAA;AD/sDA;ACktDA;EACA,cAAA;EACA,eAAA;AD/sDA;ACitDA;EACA,eAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;AD9sDA;ACgtDA;EACA,eAAA;EACA,wBAAA;AD7sDA;ACgtDA;EACA,cAAA;AD7sDA;AC+sDA;EACA,gBAAA;AD7sDA;ACgtDA;EACA,WAAA;EACA,YAAA;AD7sDA;;AAEA,oCAAoC","file":"index.vue","sourcesContent":["@charset \"UTF-8\";\n.operation-box {\n max-height: var(--dynamic-ctx-height);\n overflow: auto;\n padding-right: 20px;\n}\n\n.el-dropdown-menu__item {\n min-width: 140px;\n border-bottom: 1px solid #e8e8e8;\n}\n.el-dropdown-menu__item .el-button--text {\n color: #333 !important;\n}\n.el-dropdown-menu__item:hover .el-button--text {\n color: #1389ff !important;\n}\n.el-dropdown-menu__item:last-child {\n border: none !important;\n}\n\n.el-dropdown-menu {\n padding-bottom: 30px;\n}\n\n.mianContent > .tabs > .demo-tabs > ::v-deep .el-tabs__header {\n position: sticky;\n top: -20px;\n background-color: #fff;\n z-index: 1997;\n}\n\n.top-tabs {\n position: fixed;\n top: 62px;\n background-color: #fff;\n right: 0px;\n z-index: 1997;\n}\n\n.mianContent {\n height: 100%;\n overflow: hidden;\n position: relative;\n display: flex;\n flex-direction: column;\n /* // margin-bottom: 10px; */\n}\n.mianContent .demo-tabs {\n flex: 1;\n height: 0;\n display: flex;\n flex-direction: column;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content {\n flex: 1;\n height: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tabs__content::-webkit-scrollbar {\n width: 0;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n.mianContent .demo-tabs ::v-deep .el-tab-pane.pane-流程图 .bpmn-look {\n height: 0;\n flex: 1;\n}\n\n.mianContent .rowtitle {\n /* margin-top: 24px; */\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n border-left: 4px solid #1389ff;\n padding-left: 9px;\n}\n\n.mianContent .topCard {\n overflow: hidden;\n /* // border: 1px solid #DADBDE; */\n}\n\n.mianContent .topCard .topRow {\n display: flex;\n /* // line-height: 46px; */\n font-size: 14px;\n font-weight: 400;\n line-height: 32px;\n}\n\n.mianContent .topCard .topRow div:first-child {\n color: #333333;\n}\n\n.mianContent .topCard .topRow div:last-child {\n color: #777777;\n padding-left: 10px;\n}\n\n.mianContent .topCard .topRow div.process-mliv-dd {\n /* // height: 26px; */\n min-width: 30px;\n padding: 0px 16px;\n border-radius: 4px;\n background: #1389ff;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n margin-left: 10px;\n}\n\n.mianContent .tabs {\n /* // margin-bottom: 60px; */\n height: 0;\n flex: 1;\n overflow: visible !important;\n display: flex;\n flex-direction: column;\n}\n\n.mianContent .tabs :deep(.is-active) {\n font-size: 16px;\n}\n\n.mianContent .tabs :deep(.el-tabs__header) {\n position: sticky;\n top: 0;\n background-color: #fff;\n z-index: 1997;\n}\n\n.mianContent .topBtnRow {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 100%;\n}\n\n.mianContent .footBtnRow {\n z-index: 1001;\n width: 100%;\n padding: 12px 0;\n background-color: #fff;\n display: flex;\n justify-content: center;\n align-items: center;\n -webkit-transition: 0.3s;\n transition: 0.3s;\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\n}\n.mianContent .footBtnRow .el-button {\n min-width: 74px;\n height: 36px;\n border-radius: 6px;\n}\n\n.formInput {\n width: 90%;\n}\n\n.dialog :deep(.el-dialog__header) {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n}\n\n.dialog ::v-deep.el-dialog__body {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n padding-right: 10px;\n}\n\n.dialog :deep(.el-dialog__footer) {\n padding: 12px;\n text-align: center;\n}\n\n.dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n\n.dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n}\n\n.dialog .el-dialog__body {\n padding: 45px 30px;\n}\n.dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n.view-file {\n color: #1389ff;\n cursor: pointer;\n}\n\n.view-node-info {\n cursor: pointer;\n color: #1389ff;\n margin-left: 34px;\n font-size: 16px;\n}\n\n.iconsR {\n cursor: pointer;\n transform: rotate(90deg);\n}\n\n::v-deep .task .el-radio-group .el-radio--small.is-bordered {\n margin: 0 20px;\n}\n::v-deep .task .el-radio-group .el-radio.is-bordered + .el-radio.is-bordered {\n margin: 5px 20px;\n}\n\n.sign-img {\n width: 60px;\n height: 60px;\n}\n\n/*# sourceMappingURL=index.vue.map */","<template>\r\n <div\r\n class=\"mianContent\"\r\n v-loading=\"boxLoading && !isButton\"\r\n ref=\"mianContent\"\r\n :style=\"{\r\n // height:\r\n // activeName == '流程图'\r\n // ? '100%'\r\n // : $refs['footBtnRow']\r\n // ? `calc(100% - 50px)`\r\n // : ' 100%',\r\n // overflow: activeName == '流程图' ? 'hidden !important' : 'auto',\r\n }\"\r\n >\r\n <template v-if=\"!isButton\">\r\n <div class=\"tabs\" ref=\"baseTabs\">\r\n <el-tabs\r\n v-model=\"activeName\"\r\n class=\"demo-tabs\"\r\n @tab-click=\"handleClick\"\r\n >\r\n <el-tab-pane\r\n :label=\"item.name\"\r\n :name=\"item.slot || item.name\"\r\n v-for=\"(item, index) in tabs\"\r\n :key=\"index\"\r\n :item=\"item\"\r\n :class=\"['pane-' + item.name]\"\r\n >\r\n <template v-if=\"item.name == '基本信息' && !item.slot\">\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '流程图' && !item.slot\">\r\n <div class=\"view-node-info\" @click=\"getNodeList\">\r\n 查看流程节点信息\r\n </div>\r\n <iframe\r\n v-if=\"trackUrl\"\r\n :src=\"trackUrl\"\r\n style=\"width: 100%; height: 100%; border: none\"\r\n :style=\"{ height: `${iframeHeight}px` }\"\r\n scrolling=\"no\"\r\n frameborder=\"0\"\r\n :key=\"processId\"\r\n ></iframe>\r\n <!-- 展示条件需要同时满足v-if -->\r\n <bpmnLook v-if=\"activeName == '流程图' && processData.process && processData.process.xml\" :approvalData=\"processData.flow\" :diagram=\"processData.process.xml\"></bpmnLook>\r\n <div\r\n v-else\r\n style=\"\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无流程图\r\n </div>\r\n </template>\r\n <template v-else-if=\"item.name == '审批记录' && !item.slot\">\r\n <processFlow v-if=\"activeName == '审批记录' && processData.flow\" :flow-list=\"formatFlow(processData.flow)\"></processFlow>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </template>\r\n <template v-else>\r\n <div :style=\"`min-height: ${tabheight}px;`\">\r\n <slot\r\n v-if=\"item.slot\"\r\n :name=\"item.slot\"\r\n :taskNode=\"getTaskNode()\"\r\n ></slot>\r\n <slot v-else name=\"default\" :taskNode=\"getTaskNode()\"></slot>\r\n </div>\r\n </template>\r\n </el-tab-pane>\r\n <!-- <el-tab-pane label=\"流程图\" name=\"2\" style=\"height: 100%\">\r\n </el-tab-pane> -->\r\n <!-- <el-tab-pane label=\"审批记录\" name=\"3\">\r\n <el-table\r\n :data=\"taskCommentList\"\r\n border\r\n style=\"width: 100%; margin-bottom: 20px\"\r\n v-if=\"taskCommentList && taskCommentList.length > 0\"\r\n >\r\n <el-table-column type=\"index\" width=\"80\" label=\"序号\" />\r\n <el-table-column\r\n prop=\"activityName\"\r\n label=\"节点名称\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"createUserName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n <el-table-column\r\n prop=\"actionName\"\r\n label=\"审批操作\"\r\n ></el-table-column>\r\n <el-table-column prop=\"msg\" label=\"审批意见\">\r\n <template #default=\"scope\">\r\n <div v-html=\"scope.row.msg\"></div>\r\n <el-popover\r\n placement=\"bottom-end\"\r\n :width=\"500\"\r\n trigger=\"click\"\r\n v-if=\"scope.row.metaAnnexList.length > 0\"\r\n >\r\n <template #reference>\r\n <div class=\"view-file\">查看附件</div>\r\n </template>\r\n <ViewFile\r\n v-if=\"scope.row.metaAnnexList\"\r\n :dataList=\"scope.row.metaAnnexList\"\r\n />\r\n </el-popover>\r\n </template>\r\n </el-table-column>\r\n <el-table-column\r\n prop=\"createDate\"\r\n label=\"审批时间\"\r\n ></el-table-column>\r\n </el-table>\r\n <div\r\n v-else\r\n style=\"\r\n height: 100px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n \"\r\n >\r\n 暂无数据\r\n </div>\r\n </el-tab-pane> -->\r\n </el-tabs>\r\n </div>\r\n </template>\r\n <!-- 底部按钮 -->\r\n <!-- <processBtns\r\n :loading=\"submitLoading\"\r\n :button-list=\"processData.button\"\r\n :userId=\"userId\"\r\n :process=\"processData.process\"\r\n :comment=\"comment\"\r\n @draft=\"handleDraft({ taskId: process.taskId, variables: form })\"\r\n @examine=\"handleExamine\"\r\n @user-select=\"handleUserSelect\"\r\n @print=\"handlePrint\"\r\n @rollback=\"handleRollbackTask\"\r\n @terminate=\"handleTerminateProcess\"\r\n @withdraw=\"handleWithdrawTask\"\r\n @reminders=\"handleReminders\"\r\n @circulate=\"handleCirculate\"\r\n ></processBtns> -->\r\n\r\n <div\r\n class=\"footBtnRow foot-item\"\r\n :style=\"{ width: mainWidth + 'px' }\"\r\n ref=\"footBtnRow\"\r\n v-if=\"isAdditional && absoluteBtns.outside.length > 0\"\r\n >\r\n <slot name=\"btn\" v-bind=\"processStatus\"></slot>\r\n </div>\r\n <div v-else-if=\"!showBtns\"></div>\r\n <div\r\n class=\"footBtnRow foot-item\"\r\n ref=\"footBtnRow\"\r\n :style=\"{ width: mainWidth + 'px' }\"\r\n v-else-if=\"\r\n (!ProcessInsObj.end &&\r\n absoluteBtns.outside.length > 0 &&\r\n processStatus.appId != 'com.awspaas.user.apps.root') ||\r\n customBtns.length > 0\r\n \"\r\n v-loading=\"footBtnLoading\"\r\n >\r\n <!-- <slot name=\"btn\"> -->\r\n <template\r\n v-if=\"\r\n (processData.process.status == 'todo' || customBtns.length > 0) &&\r\n absoluteBtns.outside.length > 0\r\n \"\r\n >\r\n <el-dropdown\r\n placement=\"top-start\"\r\n trigger=\"click\"\r\n v-if=\"absoluteBtns.inside.length > 0\"\r\n >\r\n <el-button size=\"small\" style=\"margin-right: 10px\"> 更多 </el-button>\r\n <el-dropdown-menu slot=\"dropdown\">\r\n <el-dropdown-item\r\n v-for=\"(item, index) in absoluteBtns.inside\"\r\n :key=\"item.name + index\"\r\n @click.native=\"\r\n () => {\r\n item.click();\r\n aftClickBtn = item;\r\n }\r\n \"\r\n >\r\n <el-button\r\n class=\"btn drop-btn\"\r\n type=\"text\"\r\n size=\"mini\"\r\n :icon=\"item.icon\"\r\n :loading=\"buttonLoading\"\r\n >\r\n {{ item.name }}\r\n </el-button>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n <el-button\r\n v-for=\"item in absoluteBtns.outside\"\r\n :key=\"item.name\"\r\n v-bind=\"item.btnProps\"\r\n @click=\"\r\n () => {\r\n item.click();\r\n aftClickBtn = item;\r\n }\r\n \"\r\n size=\"small\"\r\n :loading=\"buttonLoading\"\r\n >\r\n {{ item.name }}\r\n </el-button>\r\n </template>\r\n <!-- </slot> -->\r\n <slot name=\"btnAppend\"></slot>\r\n </div>\r\n <div class=\"dialog\">\r\n <el-dialog\r\n :visible.sync=\"dialogVisibleOperation\"\r\n append-to-body\r\n class=\"dialog\"\r\n width=\"600px\"\r\n v-dialogDrag\r\n :title=\"operationLabel\"\r\n :close-on-click-modal=\"false\"\r\n :show-close=\"!isOperLoading\"\r\n :before-close=\"cancelHandlerFn\"\r\n top=\"6vh\" :style=\"dynamicStyle\"\r\n >\r\n <div class=\"operation-box\" ref=\"obRef\">\r\n <component\r\n v-if=\"dialogVisibleOperation\"\r\n ref=\"operationRef\"\r\n :is=\"operationCom\"\r\n :param=\"operationParam\"\r\n @success=\"operationSuccess\"\r\n @fail=\"operationFail\"\r\n :isOperLoading=\"isOperLoading\"\r\n >\r\n <template #form>\r\n <slot :name=\"aftClickBtn.slot\" v-if=\"aftClickBtn.slot\"></slot>\r\n </template>\r\n <template #file>\r\n <el-form\r\n label-width=\"120px\"\r\n status-icon\r\n v-if=\"attachShow\"\r\n @submit.native.prevent\r\n :rules=\"rules\"\r\n >\r\n <el-form-item\r\n label=\"附件\"\r\n :prop=\"attachRule.required ? 'attach' : ''\"\r\n >\r\n <jyr-file-upload\r\n v-model=\"attach\"\r\n :multiple=\"attachRule.limit > 0\"\r\n :limit=\"attachRule.limit\"\r\n fullFileObject\r\n showFileName\r\n ref=\"fileUpload\"\r\n />\r\n </el-form-item>\r\n </el-form>\r\n </template>\r\n </component>\r\n </div>\r\n\r\n <template #footer>\r\n <el-button\r\n v-loading\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n :loading=\"isOperLoading\"\r\n >确 定</el-button\r\n >\r\n <el-button\r\n v-loading\r\n @click=\"cancelHandlerFn\"\r\n :loading=\"isOperLoading\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n <!-- 选择任务 -->\r\n <el-dialog\r\n title=\"选择处理任务\"\r\n :visible.sync=\"showMulTask\"\r\n append-to-body\r\n :close-on-click-modal=\"false\"\r\n width=\"500px\"\r\n :show-close=\"false\"\r\n >\r\n <el-form ref=\"form\" label-width=\"100px\" class=\"task\">\r\n <el-form-item label=\"请选择:\" prop=\"content\">\r\n <el-radio-group v-model=\"mulTaskTaskId\" size=\"small\">\r\n <el-radio\r\n v-for=\"item in mulTaskList\"\r\n :key=\"item.nodeId\"\r\n :label=\"item.taskId\"\r\n border\r\n >{{ item.nodeName }}</el-radio\r\n >\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-form>\r\n <div class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"onCheckSure\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n <el-dialog\r\n :visible.sync=\"nodeInfoVisible\"\r\n append-to-body\r\n width=\"600px\"\r\n title=\"流程节点信息\"\r\n :modal=\"false\"\r\n :close-on-click-modal=\"false\"\r\n v-dialogDrag\r\n >\r\n <el-table :data=\"filterFlow(processData.flow)\" border>\r\n <el-table-column\r\n label=\"序号\"\r\n type=\"index\"\r\n width=\"120px\"\r\n ></el-table-column>\r\n <el-table-column prop=\"historyActivityName\" label=\"节点名称\"></el-table-column>\r\n <!-- <el-table-column prop=\"type\" label=\"类型\"></el-table-column> -->\r\n <el-table-column\r\n prop=\"assigneeName\"\r\n label=\"审批人\"\r\n ></el-table-column>\r\n </el-table>\r\n </el-dialog>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { Message as ElMessage, MessageBox as ElMessageBox } from \"element-ui\";\r\nimport treeselect from \"@riophae/vue-treeselect\";\r\nimport \"@riophae/vue-treeselect/dist/vue-treeselect.css\";\r\nimport api from \"./api\";\r\nimport * as $enum from \"./enum\";\r\nimport staffTree from \"./staff-tree.vue\";\r\nimport ViewFile from \"./view-file.vue\";\r\nimport * as operation from \"./operation/index.js\";\r\nimport JyrFileUpload from \"../JyrFileUpload/index\";\r\nimport processBtns from \"./operation/processBtns.vue\";\r\nimport processFlow from \"./operation/processFlow.vue\";\r\nimport bpmnLook from './bpmnLook.vue';\r\nimport dayjs from \"dayjs\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { bpmnLook, processBtns, processFlow, treeselect, staffTree, ...operation, ViewFile, JyrFileUpload },\r\n props: {\r\n /** 流程实例id */\r\n taskId: {\r\n // require: true,\r\n default: false,\r\n type: String,\r\n },\r\n processId: {\r\n require: true,\r\n default: false,\r\n type: String,\r\n },\r\n // processDefId: {\r\n // require: false,\r\n // default: false,\r\n // type: String,\r\n // },\r\n userId: { require: true, default: \"\", type: String },\r\n // task: {\r\n // default: false,\r\n // type: Object,\r\n // },\r\n showBtns: {\r\n default: true,\r\n type: Boolean,\r\n },\r\n isView: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n getVars: { type: Function },\r\n before: { type: Function },\r\n isAlis: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isAdditional: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n businessData: {\r\n type: Object,\r\n default: undefined,\r\n },\r\n excludeBtn: {\r\n type: String,\r\n default: \"\",\r\n },\r\n showAsPlanned: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showCommIdea: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n commentMsgRequired: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n customBtn: {\r\n default: \"\",\r\n },\r\n tabs: {\r\n default: () => [\r\n {\r\n name: \"基本信息\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"流程图\",\r\n slot: \"\",\r\n },\r\n {\r\n name: \"审批记录\",\r\n slot: \"\",\r\n },\r\n ],\r\n },\r\n personType: {\r\n default: \"\",\r\n },\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n isButton: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n provide() {\r\n return {\r\n isAlisInject: this.isAlis,\r\n };\r\n },\r\n // emits: ['update:modelValue', \"getData\", \"change\", \"changeGetData\"],\r\n data() {\r\n return {\r\n incomingConditionItemList: [],\r\n // 流程信息\r\n deptId: '',\r\n initProcessData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n processData: {\r\n button: [],\r\n flow: [],\r\n form: {},\r\n process: {},\r\n },\r\n submitLoading: false,\r\n flowChartVisible: false,\r\n comment: null,\r\n // 流程信息\r\n dynamicMaxHeight: '400px',\r\n showMulTask: false,\r\n mulTaskList: [],\r\n mulTaskTaskId: \"\",\r\n attach: [],\r\n customBtns: [],\r\n overheight: 10,\r\n iframeHeight: 500,\r\n mainWidth: 0,\r\n absoluteTaskId: \"\",\r\n infoView: false,\r\n showTopTabs: false,\r\n buttonLoading: false,\r\n footBtnLoading: true,\r\n tabheight: 400,\r\n aftClickBtn: \"\",\r\n attachRule: {\r\n required: true,\r\n limit: 0,\r\n },\r\n nodeInfoVisible: false,\r\n nodeInfoList: [],\r\n jjForm: {\r\n saveMetaAnnexCmdList: [],\r\n },\r\n targetUID: \"\",\r\n commentMsg: \"\",\r\n trackUrl: \"\",\r\n taskObj: {},\r\n taskCommentList: [],\r\n absoluteBtns: { inside: [], outside: [] },\r\n processStatus: \"\",\r\n nextTaskNode: [],\r\n activeName: \"基本信息\",\r\n ProcessInsObj: {},\r\n outGatewayUserTaskModel: [],\r\n dialogVisibleOperation: false,\r\n operationLabel: \"\",\r\n operationCom: {},\r\n operationParam: {},\r\n taskNode: [],\r\n aftTaskNode: {},\r\n operation,\r\n Enum: $enum,\r\n isOperLoading: false,\r\n boxLoading: false,\r\n rules: {\r\n attach: [{ required: true, trigger: \"change\" }],\r\n },\r\n\t noReload: false,\r\n digitalSignatureList: []\r\n };\r\n },\r\n mounted() {\r\n window.onresize = () => {\r\n return (() => {\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n })();\r\n };\r\n },\r\n watch: {\r\n activeName: function (n) {\r\n if (n == 1) this.activeName = \"基本信息\";\r\n },\r\n infoView: function () {\r\n this.calculateHeight();\r\n },\r\n taskId: {\r\n handler(val) {\r\n if (!val) return;\r\n this.absoluteTaskId = val;\r\n },\r\n deep: true,\r\n immediate: true,\r\n },\r\n processId: {\r\n handler(val) {\r\n if (val) {\r\n this.customBtns = [];\r\n this.absoluteBtns = { inside: [], outside: [] };\r\n this.activeName = this.tabs.length > 0 ? this.tabs[0][\"name\"] : \"\";\r\n // 获取流程节点,流程图,流程实例,流程审批\r\n this.getProcessInfo()\r\n if (Date.now()) return;\r\n\r\n api.repository.queryTaskNodeList(this.processId).then((e) => {\r\n\t\t\t if(!this.noReload){\r\n\t\t\t\t this.noReload = false\r\n\t\t\t\t if (!this.absoluteTaskId && e.data.length > 1) {\r\n\t\t\t\t this.mulTaskList = e.data;\r\n\t\t\t\t this.showMulTask = true;\r\n\t\t\t\t return;\r\n\t\t\t\t } else {\r\n\t\t\t\t this.absoluteTaskId =\r\n\t\t\t\t e.data && e.data.length > 0 ? e.data[0][\"taskId\"] : \"\";\r\n\t\t\t\t this.aftTaskNode = e.data[0];\r\n\t\t\t\t }\r\n\t\t\t }\r\n\r\n console.log(\"======\", this.absoluteTaskId);\r\n if (e.code == $enum.apiCode.success) {\r\n this.taskNode = e.data;\r\n api.pis\r\n .getProcessStatus(this.processId, this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.processStatus = res.data;\r\n if (this.absoluteTaskId) {\r\n api.repository\r\n .getUserTaskModelCmd(this.absoluteTaskId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n this.taskObj = res.data;\r\n this.straightenBtns();\r\n }\r\n });\r\n } else {\r\n this.straightenBtns();\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n api.repository\r\n .getTrackUrl({ processInstId: val, type: $enum.SourceType.电脑端 })\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n }\r\n });\r\n api.tis.getTaskCommentList(this.processId, \"\").then((res) => {\r\n this.taskCommentList = res.data;\r\n this.digitalSignatureList = res.data.filter(item => item.digitalSignature).map(item => item.digitalSignature)\r\n });\r\n api.pis.getProcessInstanceById(this.processId).then((res) => {\r\n this.ProcessInsObj = res.data;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n });\r\n });\r\n\r\n // api.repository.queryTaskNodeList(this.processId).then((res) => {\r\n // if (res.code == $enum.apiCode.success) this.taskNode = res.data;\r\n // });\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n absoluteTaskId: {\r\n handler(val) {\r\n if (val) {\r\n }\r\n },\r\n immediate: true,\r\n //这个参数代表监听对象时,可以监听深度嵌套的对象属性\r\n deep: true,\r\n },\r\n dialogVisibleOperation: {\r\n handler(val) {\r\n this.$emit(\"show-modal\", val);\r\n },\r\n },\r\n },\r\n methods: {\r\n // 流程\r\n formatFlow(flow) {\r\n const newFlow = (flow || []).map(item => {\r\n return {\r\n ...item,\r\n attachmentsFujian: (item.attachments || []).filter(i => i.type != 'signature'),\r\n attachmentsQianzi: (item.attachments || []).filter(i => i.type == 'signature'),\r\n }\r\n })\r\n return newFlow\r\n },\r\n cancelHandlerFn(){\r\n this.dialogVisibleOperation = false\r\n this.submitLoading = false\r\n },\r\n filterFlow(flowArr) {\r\n return flowArr.filter((item) => {\r\n return ['userTask', 'candidate'].includes(item.historyActivityType)\r\n });\r\n },\r\n getProcessInfo() {\r\n this.submitLoading = true\r\n this.boxLoading = true;\r\n\r\n api.tis.getTaskModelDetail(this.taskId ? {\r\n processInstId: this.processId,\r\n taskId: this.taskId,\r\n } : {\r\n processInstId: this.processId,\r\n }).then(async res => {\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.taskObj.buttons = this.processData.button\r\n this.absoluteTaskId = taskId\r\n this.straightenBtns();\r\n console.log(deptId, 'id')\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n });\r\n\r\n console.log(this.processData.flow, 'flw')\r\n this.flowChartVisible = true\r\n this.submitLoading = false\r\n this.boxLoading = false\r\n }\r\n })\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n handleDraft() {\r\n this.submitLoading = true;\r\n },\r\n // 提交(办理)true、取消申请 false\r\n handleExamine(flag, name) {\r\n console.log(flag, 'flag')\r\n if (flag) {\r\n this.handlePass(name)\r\n } else {\r\n this.handleCancel(name)\r\n }\r\n this.submitLoading = true;\r\n },\r\n // 办理\r\n async handlePass(name) {\r\n if (this.deptId) {\r\n await this.getNextNode(this.deptId)\r\n }\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.showOperation(operation.complete, name);\r\n });\r\n } else {\r\n this.showOperation(operation.complete, name);\r\n }\r\n },\r\n // 取消申请\r\n handleCancel(name) {\r\n this.showOperation(operation.cancel, name);\r\n },\r\n // 转办transfer,委托delegate,addInstance\r\n handleUserSelect({ type, checkType, name}) {\r\n if (type == 'transfer') {\r\n this.handleTransfer(name)\r\n }\r\n else if (type == 'addInstance') {\r\n this.handleAddInstance(name)\r\n }\r\n console.log('handleUserselect')\r\n },\r\n // 转办\r\n handleTransfer(name) {\r\n this.showOperation(operation.delegateTask, name);\r\n },\r\n // 加签\r\n handleAddInstance(name) {\r\n this.showOperation(operation.counterSign, name);\r\n },\r\n handlePrint() {\r\n console.log('handlePrint')\r\n },\r\n handleRollbackTask(name) {\r\n console.log('handleRollbackTask')\r\n this.showOperation(operation.roolback, name);\r\n },\r\n handleTerminateProcess() {\r\n console.log('handleTerminateProcess')\r\n },\r\n // 传阅\r\n handleCirculate(name) {\r\n console.log('handleCirculate')\r\n this.showOperation(operation.ccTask, name);\r\n },\r\n // 撤销,撤回\r\n handleWithdrawTask(name) {\r\n console.log('handleWithdrawTask')\r\n this.handleRevoke();\r\n // this.showOperation(operation.withdrawTask, '请选择撤销/撤回操作');\r\n },\r\n // 流程\r\n findTargetHtml(startNode, targetClass, searchKey = 'parentElement') {\r\n\t\t\t\tif (!startNode) return null\r\n \t\t\tif (startNode.classList.contains(targetClass)) {\r\n \t\t\treturn startNode\r\n \t\t\t}\r\n \t\t\tlet curEl = startNode[searchKey]\r\n \t\t\tif (!curEl) return null\r\n \t\t\tif (searchKey == 'children') {\r\n \t\t\tfor (let i = 0; i <= curEl.length - 1; i++) {\r\n \t\t\tif (curEl[i].classList.contains(targetClass)) {\r\n \t\t\treturn curEl[i]\r\n \t\t\t}\r\n \t\t\t}\r\n \t\t\treturn\r\n \t\t\t}\r\n \t\t\treturn this.findTargetHtml(curEl, targetClass)\r\n\t\t\t},\r\n findImageIndex(item){\r\n return item ? this.digitalSignatureList.findIndex(i => i == item) : -1\r\n },\r\n onCheckSure() {\r\n this.absoluteTaskId = this.mulTaskTaskId;\r\n this.mulTaskList.map((item) => {\r\n if (item.taskId == this.mulTaskTaskId) {\r\n this.aftTaskNode = item;\r\n }\r\n });\r\n\t this.noReload = true\r\n this.showMulTask = false;\r\n this.footBtnLoading = true;\r\n let temp = this.processId;\r\n this.processId = \"\";\r\n this.processId = temp;\r\n },\r\n showButtonLoading() {\r\n this.buttonLoading = true;\r\n },\r\n hideButtonLoading() {\r\n this.buttonLoading = false;\r\n },\r\n calculateHeight() {\r\n let h = 0;\r\n if (this.$refs[\"footBtnRow\"]) {\r\n h += this.$refs[\"footBtnRow\"].offsetHeight;\r\n }\r\n if (this.$refs[\"mianContent\"]) {\r\n this.mainWidth = this.$refs[\"mianContent\"].offsetWidth;\r\n }\r\n if (this.infoView && this.absoluteBtns.outside.length > 0) {\r\n h += 32;\r\n }\r\n if (this.$refs[\"infoBoxFign\"]) {\r\n let windowHeight =\r\n window.innerHeight ||\r\n document.documentElement.clientHeight ||\r\n document.body.clientHeight;\r\n this.tabheight =\r\n windowHeight - this.$refs[\"infoBoxFign\"].offsetTop - 192;\r\n }\r\n this.overheight = h + 116;\r\n this.iframeHeight = this.$refs[\"mianContent\"].offsetHeight - 146;\r\n },\r\n getNodeList() {\r\n this.nodeInfoVisible = true;\r\n // api.pis.findNodeParticipantRows(this.processId).then((e) => {\r\n \r\n // e.data.map((item) => {\r\n // if (item.type == \"串签\" || item.type == \"并签\") {\r\n // item[\"name\"] += `【${item.type}】`;\r\n // }\r\n // });\r\n // this.nodeInfoList = e.data;\r\n // });\r\n },\r\n fileNameLastof(e, len = 0) {\r\n if (e.indexOf(\"http\") == -1) len = 0;\r\n if (!e) return;\r\n let last = \"/\";\r\n if (e.indexOf(\"\\\\\") != -1) {\r\n last = \"\\\\\";\r\n }\r\n //整理文件名\r\n let filename = e;\r\n let lastindex = filename.lastIndexOf(last);\r\n return filename.substr(lastindex + 1 + len, filename.length);\r\n },\r\n clickCustomButton(name) {\r\n this.$emit(\"clickCustomButton\", {\r\n name,\r\n processStatus: this.processStatus,\r\n setName: (label) => {\r\n this.taskObj.buttons.map((item) => {\r\n if (item.label == name) {\r\n item.label = label;\r\n }\r\n });\r\n this.straightenBtns();\r\n },\r\n });\r\n },\r\n // 获取下一个节点数据\r\n async getNextNode(deptId) {\r\n let res1\r\n try {\r\n res1 = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n );\r\n } catch (e) {\r\n console.error(e)\r\n res1 = {}\r\n }\r\n let nextTaskNode = res1.data || {};\r\n\r\n // 复杂网关分支:\r\n if (res1.code == 200 && !res1.data.evaluation) {\r\n this.incomingConditionItemList = []\r\n nextTaskNode.branches = await this.getOutgoingProcessNode(\r\n this.absoluteTaskId,\r\n res1.data.id\r\n );\r\n }\r\n\r\n if (nextTaskNode.id && !nextTaskNode.setPersonnel) {\r\n const nodeUserParams = getNodeUserParams(nextTaskNode)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n // 需要传入部门id\r\n deptId: deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == $enum.apiCode.success) {\r\n nextTaskNode.userList = res.data\r\n }\r\n }\r\n this.nextTaskNode = nextTaskNode\r\n console.log(nextTaskNode, 'getNextNode')\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n async showOperation(com, label) {\r\n this.attach = [];\r\n if (false && this.processStatus.allUserNames.length > 0) {\r\n if (this.absoluteTaskId) {\r\n let vars;\r\n if (this.getVars) {\r\n vars = this.getVars();\r\n if (vars === false) {\r\n return false;\r\n }\r\n }\r\n let res = await api.tis.simulation(\r\n this.absoluteTaskId,\r\n this.processId,\r\n vars\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n for (var i in res.data) {\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"固定账户\" ||\r\n res.data[i].userTaskModelDTO.humanPerformer.name ==\r\n \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(this.absoluteTaskId, [\r\n res.data[i].id,\r\n ])\r\n .then((e) => {\r\n res.data[i].userTaskModelDTO.routeTxt[\"userNames\"] =\r\n e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n this.nextTaskNode = res.data;\r\n } else {\r\n this.nextTaskNode = [];\r\n this.outGatewayUserTaskModel = await this.getOutgoingProcessNode(\r\n this.absoluteTaskId,\r\n \"\"\r\n );\r\n }\r\n }\r\n }\r\n this.operationLabel = label;\r\n // this.operationParam = new operation.PorpParam(\"\", this.processId, this.processDefId, this.task.id, this.task.activityDefId);\r\n this.operationParam.processInstId = this.processId;\r\n // this.operationParam.processDefId = this.processDefId;\r\n this.operationParam.taskInstId = this.absoluteTaskId;\r\n // this.operationParam.taskDeftId = this.task.activityDefId;\r\n this.operationParam.nextTaskNode = this.nextTaskNode;\r\n this.operationParam.incomingConditionItemList = this.incomingConditionItemList\r\n this.operationParam.variables = (this.processData.process || {}).variables || {}\r\n this.operationParam.extendedProperties = (this.processData.form || {}).extendedProperties || []\r\n this.operationParam.taskObj = this.taskObj;\r\n this.operationParam.getVars = this.getVars;\r\n this.operationParam.outGatewayUserTaskModel =\r\n this.outGatewayUserTaskModel;\r\n this.operationParam.taskNode = this.getTaskNode();\r\n this.operationParam.businessData = this.businessData;\r\n this.operationParam.showAsPlanned = this.showAsPlanned;\r\n this.operationParam.showCommIdea = this.showCommIdea;\r\n this.operationParam.commentMsgRequired = this.commentMsgRequired;\r\n this.operationParam.personType = this.personType;\r\n this.operationParam.personEntity = {\r\n ...this.personEntity,\r\n ...(this.aftClickBtn.personEntity || {}),\r\n };\r\n this.operationParam.ProcessInsObj = this.ProcessInsObj;\r\n this.operationCom = com;\r\n this.dialogVisibleOperation = true;\r\n this.$nextTick(() => {\r\n \t\tlet ctnEl = this.$refs.obRef\r\n\t\t\t\tconsole.log(ctnEl, this.$refs);\r\n \t\tif (!ctnEl) return \r\n \t\tlet topDistance = ctnEl.getBoundingClientRect().top\r\n \t\tlet dialogEl = this.findTargetHtml(ctnEl, 'el-dialog')\r\n \t\tlet dialogFootEl = this.findTargetHtml(dialogEl, 'el-dialog__footer', 'children')\r\n \t\t// 视口高度 - margin - head - footer\r\n \t\tlet val = window.innerHeight - topDistance - topDistance - dialogFootEl.clientHeight - 32\r\n \t\tthis.dynamicMaxHeight = `${val}px`\r\n \t\t})\r\n },\r\n onClickOperation() {\r\n if (\r\n this.attachShow &&\r\n this.attachRule.required &&\r\n this.attach.length == 0\r\n ) {\r\n return ElMessage.error(\"请上传附件\");\r\n }\r\n if (this.aftClickBtn.preposition) {\r\n this.operationMain(this.aftClickBtn.preposition);\r\n } else {\r\n this.operationMain();\r\n }\r\n\r\n // if (this.$refs[\"fileUpload\"] && this.$refs[\"fileUpload\"].getLoading()) {\r\n // return ElMessage.error(\"请等待附件上传完成后重试\");\r\n // }\r\n },\r\n operationMain(preposition = false) {\r\n let saveMetaAnnexCmdList\r\n if (this.attachShow) {\r\n saveMetaAnnexCmdList = [];\r\n this.attach.map((item) => {\r\n saveMetaAnnexCmdList.push({\r\n id: item.id,\r\n name: this.fileNameLastof(item.name),\r\n size: item.fileSize,\r\n format: item.fileType,\r\n url: item.url,\r\n uploadTime: item.createTime,\r\n processInstId: this.operationParam.processInstId,\r\n taskInstId: this.operationParam.taskInstId,\r\n });\r\n });\r\n saveMetaAnnexCmdList = saveMetaAnnexCmdList.sort((a, b) => {\r\n return dayjs(a.uploadTime).valueOf() > dayjs(b.uploadTime).valueOf();\r\n });\r\n // api.tis.patchSave({\r\n // saveMetaAnnexCmdList,\r\n // });\r\n }\r\n\r\n if (this.$refs.operationRef) {\r\n this.$refs.operationRef.confirm(preposition, () => {\r\n this.isOperLoading = true;\r\n }, saveMetaAnnexCmdList);\r\n }\r\n },\r\n operationSuccess(isComplete = true) {\r\n ElMessage.success(\"操作成功\");\r\n this.dialogVisibleOperation = false;\r\n // router.go(0);\r\n if (isComplete) this.$emit(\"Complete\");\r\n this.isOperLoading = false;\r\n },\r\n operationFail(msg = \"\") {\r\n msg && ElMessage.warning(msg);\r\n this.isOperLoading = false;\r\n },\r\n async getOutgoingProcessNode(taskId, processNodeId) {\r\n let res = await api.repository.getOutgoingProcessNode(\r\n taskId,\r\n processNodeId\r\n );\r\n if (res.code == $enum.apiCode.success) {\r\n if (res.data) {\r\n for (let i = 0; i < res.data.length; i++) {\r\n let o = res.data[i];\r\n if (o.incomingConditionItemList && o.incomingConditionItemList.length !== 0) {\r\n o.nodeInfoDTO.incomingConditionItemList = o.incomingConditionItemList\r\n console.error(o.incomingConditionItemList, 'o.incomingConditionItemList')\r\n this.incomingConditionItemList.push(...o.incomingConditionItemList)\r\n }\r\n if (o.nodeInfoDTO.nodeType != 'userTask') {\r\n o.nodeInfoDTO.branches = await this.getOutgoingProcessNode(taskId, o.nodeInfoDTO.id);\r\n }\r\n if (\r\n res.data[i][\"type\"] != \"endEvent\" &&\r\n (res.data[i].humanPerformerName == \"固定账户\" ||\r\n res.data[i].humanPerformerName == \"与流程申请人相关\")\r\n ) {\r\n await api.repository\r\n .getParticipantsOfPerformerNames(taskId, [res.data[i].id])\r\n .then((e) => {\r\n res.data[i][\"routeTxt\"][\"userNames\"] = e.data[res.data[i].id];\r\n });\r\n }\r\n }\r\n\r\n if (res.data.length == 0) {\r\n res.data.push({\r\n id: \"\",\r\n incomingConditionItemList: [],\r\n type: \"endEvent\",\r\n name: \"结束事件\",\r\n });\r\n }\r\n }\r\n return res.data;\r\n }\r\n return [];\r\n },\r\n getColor(status) {\r\n if (status == \"审核中\" || status == \"审批中\") return \"#6DC743\";\r\n if (status == \"已驳回\") return \"#F14B4C\";\r\n if (status == \"已撤销\") return \"#CECECE\";\r\n if (status == \"已完成\") return \"#6DC743\";\r\n\r\n return \"#1389FF\";\r\n },\r\n handleClick(e) {\r\n this.$emit(\"clickTab\",JSON.parse(JSON.stringify(e.$vnode.data.attrs.item)));\r\n },\r\n getTaskNode() {\r\n if (this.taskNode.filter)\r\n return this.taskNode.filter((o) => {\r\n return o.nodeId == this.taskObj.id;\r\n });\r\n return [];\r\n },\r\n handleRevoke() {\r\n ElMessageBox.confirm(`确定撤销吗`, \"撤销\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis\r\n .withdrawTask(this.processData.process.processInstanceId)\r\n .then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch(() => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n handleReminders() {\r\n console.log(ElMessageBox);\r\n ElMessageBox.confirm(`确定催办吗`, \"催办\", {\r\n confirmButtonText: \"确定\",\r\n cancelButtonText: \"取消\",\r\n type: \"warning\",\r\n })\r\n .then(() => {\r\n api.tis.reminders(this.processData.process.processInstanceId).then((res) => {\r\n if (res.code == $enum.apiCode.success) {\r\n ElMessage.success(\"操作成功\");\r\n this.$emit(\"Complete\");\r\n }\r\n // else {\r\n // ElMessage.warning(res.msg);\r\n // }\r\n });\r\n })\r\n .catch((e) => {\r\n ElMessage.info(\"取消操作\");\r\n });\r\n },\r\n getButton(key) {\r\n return (this.processData.button || []).find(b => b.buttonKey == key);\r\n },\r\n operBtn() {\r\n let btnList = [];\r\n\r\n const process = this.processData.process;\r\n\r\n if (!process) {\r\n return btnList\r\n }\r\n\r\n // 加签\r\n if (process.status == 'todo' && process.isMultiInstance && this.getButton('wf_add_instance')) {\r\n let obj = {};\r\n obj.name = this.getButton('wf_add_instance').name\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"sign\";\r\n obj.click = () => {\r\n this.handleUserSelect({\r\n type: 'addInstance',\r\n checkType: 'checkbox',\r\n name: this.getButton('wf_add_instance').name,\r\n })\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (flag && !this.isView && this.taskObj.counterSignLabel) {\r\n // let obj = {};\r\n // obj.name = this.taskObj.counterSignLabel;\r\n // obj.btnProps = { type: \"primary\" };\r\n // obj.key = \"sign\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.counterSign, obj.name);\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 转办\r\n if (process.status == 'todo' && this.getButton('wf_transfer')) {\r\n let obj = {};\r\n obj.name = this.getButton('wf_transfer').name\r\n obj.key = \"delegate\";\r\n obj.click = () => {\r\n this.handleUserSelect({\r\n type: 'transfer',\r\n checkType: 'radio',\r\n name: this.getButton('wf_transfer').name,\r\n })\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (flag && !this.isView && this.taskObj.delegateTaskButtonLabel) {\r\n // let obj = {};\r\n // obj.name = this.taskObj.delegateTaskButtonLabel;\r\n // obj.key = \"delegate\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.delegateTask, obj.name);\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 委托\r\n if (process.status == 'todo' && this.getButton('wf_delegate')) {\r\n let obj = {};\r\n obj.name = this.getButton('wf_delegate').name\r\n obj.btnProps = { type: \"warning\" };\r\n obj.key = \"cc2\";\r\n obj.click = () => {\r\n this.handleUserSelect({\r\n type: 'delegate',\r\n checkType: 'radio',\r\n name: this.getButton('wf_delegate').name\r\n })\r\n };\r\n btnList.push(obj);\r\n }\r\n\r\n // 终止\r\n if (process.status == 'todo' && this.getButton('wf_terminate')) {\r\n let obj = {};\r\n obj.name = this.getButton('wf_terminate').name\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"cc3\";\r\n obj.click = () => {\r\n this.handleTerminateProcess()\r\n };\r\n btnList.push(obj);\r\n }\r\n\r\n // 传阅\r\n if (process.status == 'todo' && this.getButton('wf_cctask')) {\r\n let obj = {};\r\n obj.name = this.getButton('wf_cctask').name\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"cc\";\r\n obj.click = () => {\r\n this.handleCirculate(this.getButton('wf_cctask').name)\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (flag && !this.isView && this.taskObj.ccTaskButtonLabel) {\r\n // let obj = {};\r\n // obj.name = this.taskObj.ccTaskButtonLabel;\r\n // obj.btnProps = { type: \"primary\" };\r\n // obj.key = \"cc\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.ccTask, obj.name);\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n \r\n // 催办\r\n if (process.status == 'todo' && this.userId == (process.variables || {}).applyUserId) {\r\n let obj = {};\r\n obj.name = \"催办\";\r\n // obj.btnProps = { color: \"#1389ff\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleReminders();\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (\r\n // this.processId &&\r\n // this.processStatus.createTopUserId == this.userId &&\r\n // ((this.taskNode.length > 0 &&\r\n // this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n // this.processStatus.status == \"审批中\")\r\n // ) {\r\n // let obj = {};\r\n // obj.name = \"催办\";\r\n // // obj.btnProps = { color: \"#1389ff\" };\r\n // obj.key = \"self\";\r\n // obj.click = () => {\r\n // this.handleReminders();\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 撤销\r\n if (\r\n process.isOwner &&\r\n process.isReturnable &&\r\n !['recall', 'reject'].includes(process.processIsFinished)\r\n ) {\r\n let obj = {};\r\n obj.name = \"撤销\";\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"self\";\r\n obj.click = () => {\r\n this.handleWithdrawTask('撤销');\r\n };\r\n btnList.push(obj);\r\n }\r\n\r\n // if (\r\n // this.processId &&\r\n // this.processStatus.createTopUserId == this.userId &&\r\n // ((this.taskNode.length > 0 &&\r\n // this.aftTaskNode.taskState != $enum.TaskState.抄送) ||\r\n // this.processStatus.status == \"审批中\")\r\n // ) {\r\n // let obj = {};\r\n // obj.name = \"撤销\";\r\n // obj.btnProps = { type: \"danger\" };\r\n // obj.key = \"self\";\r\n // obj.click = () => {\r\n // this.handleRevoke();\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 拒绝\r\n if (\r\n process.status == 'todo' &&\r\n this.getButton('wf_reject')\r\n ) {\r\n let obj = {};\r\n obj.name = this.getButton('wf_reject').name\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"refuse\";\r\n obj.click = () => {\r\n this.handleExamine(false, this.getButton('wf_reject').name)\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (flag && !this.isView && this.processStatus.currUserName) {\r\n // let obj = {};\r\n // obj.name = \"拒绝\";\r\n // obj.btnProps = { type: \"danger\" };\r\n // obj.key = \"refuse\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.cancel, obj.name);\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 办理\r\n if (process.status == 'todo' && this.getButton('wf_pass')) {\r\n let obj = {};\r\n obj.name = this.getButton('wf_pass').name\r\n obj.btnProps = { type: \"primary\" };\r\n obj.key = \"complete\";\r\n obj.click = () => {\r\n if (this.before) {\r\n this.before().then(() => {\r\n this.handleExamine(true, this.getButton('wf_pass').name)\r\n });\r\n } else {\r\n this.handleExamine(true, this.getButton('wf_pass').name)\r\n }\r\n };\r\n btnList.push(obj);\r\n }\r\n // if (flag && !this.isView && this.taskObj.completeButtonLabel) {\r\n // let obj = {};\r\n // obj.name = this.taskObj.completeButtonLabel;\r\n // obj.btnProps = { type: \"primary\" };\r\n // obj.key = \"complete\";\r\n // obj.click = () => {\r\n // if (this.before) {\r\n // this.before().then(() => {\r\n // this.showOperation(operation.complete, obj.name);\r\n // });\r\n // } else {\r\n // this.showOperation(operation.complete, obj.name);\r\n // }\r\n // };\r\n // btnList.push(obj);\r\n // }\r\n\r\n // 退回\r\n if (\r\n process.status == 'todo' &&\r\n this.getButton('wf_rollback')\r\n ) {\r\n let obj = {};\r\n obj.name = this.getButton('wf_rollback').name\r\n obj.btnProps = { type: \"danger\" };\r\n obj.key = \"back\";\r\n obj.click = () => {\r\n this.handleRollbackTask(this.getButton('wf_rollback').name)\r\n };\r\n // 退回可能还有种情况,就是自定义this.clickCustomButton(obj.name);\r\n\r\n btnList.unshift(obj);\r\n }\r\n // if (\r\n // flag &&\r\n // !this.isView &&\r\n // this.taskObj &&\r\n // this.taskObj.buttons.length > 0\r\n // ) {\r\n // this.taskObj.buttons.map((item) => {\r\n // let obj = {};\r\n // obj.name = item.label;\r\n // if (item.label == \"退回\") {\r\n // obj.btnProps = { type: \"danger\" };\r\n // obj.key = \"back\";\r\n // obj.click = () => {\r\n // this.showOperation(operation.roolback, obj.name);\r\n // };\r\n // } else {\r\n // obj.btnProps = {};\r\n // obj.key = item.label;\r\n // obj.click = () => {\r\n // this.clickCustomButton(obj.name);\r\n // };\r\n // }\r\n\r\n // btnList.unshift(obj);\r\n // });\r\n // }\r\n\r\n return btnList;\r\n },\r\n straightenBtns(flag = true) {\r\n let list = [];\r\n\r\n if (this.excludeBtn) {\r\n this.operBtn().map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n } else {\r\n list = this.operBtn();\r\n }\r\n if (this.customBtns.length > 0) {\r\n list = [];\r\n this.customBtns.map((item) => {\r\n if (this.excludeBtn.indexOf(item.key) == -1 || !item.key) {\r\n list.push(item);\r\n }\r\n });\r\n }\r\n\r\n let r = {\r\n outside: [],\r\n inside: [],\r\n };\r\n if (list.length > 4) {\r\n r.outside = list.splice(list.length - 4, list.length - 1);\r\n r.inside = list;\r\n } else {\r\n r.outside = list;\r\n }\r\n\r\n if (flag && this.customBtn) {\r\n this.customBtn(\r\n { btnList: this.operBtn(), processStatus: this.processStatus },\r\n (e) => {\r\n this.customBtns = e;\r\n this.straightenBtns(false);\r\n },\r\n () => {\r\n this.$emit(\"Complete\");\r\n }\r\n );\r\n console.log(\"=======333\");\r\n } else {\r\n this.absoluteBtns = r;\r\n this.$nextTick(() => {\r\n this.calculateHeight();\r\n this.footBtnLoading = false;\r\n this.boxLoading = false;\r\n });\r\n }\r\n },\r\n },\r\n computed: {\r\n dynamicStyle() {\r\n \t\t\treturn { '--dynamic-ctx-height': this.dynamicMaxHeight }\r\n\t\t\t},\r\n attachShow() {\r\n const extendedProperties = (this.processData.form || {}).extendedProperties || []\r\n\r\n let sign = false;\r\n let fd;\r\n let annex = \"\";\r\n console.error(this.operationLabel, 'operationLabel')\r\n switch (this.operationLabel) {\r\n case \"退回\":\r\n // annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'otherButtonAnnexList'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"通过\":\r\n case \"办理\":\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'completeButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"处理\":\r\n // annex = this.operationParam.taskObj.completeButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'completeButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"同意\":\r\n // annex = this.operationParam.taskObj.completeButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'completeButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"拒绝\":\r\n // annex = this.operationParam.taskObj.otherButtonAnnexList;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'otherButtonAnnexList'\r\n })\r\n annex = fd ? fd.value : ''\r\n break;\r\n case \"加签\":\r\n // annex = this.operationParam.taskObj.counterSignButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'counterSignButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n case \"转办\":\r\n // annex = this.operationParam.taskObj.delegateTaskButtonAnnex;\r\n fd = extendedProperties.find(i => {\r\n return i.name == 'delegateTaskButtonAnnex'\r\n })\r\n annex = fd ? fd.value : ''\r\n if (annex) sign = true;\r\n break;\r\n }\r\n // 校验自定义按钮\r\n let temp = \"\";\r\n if (typeof annex != \"string\" && annex != null) {\r\n annex.map((item) => {\r\n if (item.indexOf(this.operationLabel) != -1) {\r\n sign = true;\r\n temp = item;\r\n }\r\n });\r\n }\r\n if (temp) annex = temp;\r\n\r\n // 解析数据\r\n if (sign) {\r\n const annexArr = annex.split(\":\");\r\n this.attachRule.required = annexArr[1] == \"true\" ? true : false;\r\n this.attachRule.limit =\r\n annexArr[2] == -1 ? 999 : annexArr[2];\r\n }\r\n return sign;\r\n },\r\n },\r\n};\r\n</script>\r\n<!-- <style >\r\n.demo-tabs {\r\n position: relative;\r\n .el-tabs__header {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n}\r\n</style> -->\r\n\r\n<style scoped lang=\"scss\">\r\n.operation-box {\r\n max-height: var(--dynamic-ctx-height);\r\n overflow: auto;\r\n padding-right: 20px;\r\n}\r\n.el-dropdown-menu__item {\r\n min-width: 140px;\r\n border-bottom: 1px solid #e8e8e8;\r\n .el-button--text {\r\n color: #333 !important;\r\n }\r\n &:hover {\r\n .el-button--text {\r\n color: #1389ff !important;\r\n }\r\n }\r\n &:last-child {\r\n border: none !important;\r\n }\r\n}\r\n.el-dropdown-menu {\r\n padding-bottom: 30px;\r\n}\r\n.mianContent {\r\n & > .tabs {\r\n & > .demo-tabs {\r\n & > ::v-deep .el-tabs__header {\r\n position: sticky;\r\n top: -20px;\r\n background-color: #fff;\r\n z-index: 1997;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.top-tabs {\r\n position: fixed;\r\n top: 62px;\r\n background-color: #fff;\r\n right: 0px;\r\n z-index: 1997;\r\n}\r\n.mianContent {\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n // margin-top: 20px;\r\n // padding-top: 20px;\r\n // width: 100%;\r\n /* // margin-bottom: 10px; */\r\n // overflow: hidden;\r\n .demo-tabs {\r\n flex: 1;\r\n height: 0;\r\n // height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n ::v-deep .el-tabs__content {\r\n flex: 1;\r\n height: 0;\r\n &::-webkit-scrollbar {\r\n width: 0;\r\n }\r\n }\r\n ::v-deep .el-tab-pane {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n &.pane-流程图 {\r\n .bpmn-look {\r\n height: 0;\r\n flex: 1;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n.mianContent .rowtitle {\r\n /* margin-top: 24px; */\r\n margin-bottom: 16px;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n border-left: 4px solid #1389ff;\r\n padding-left: 9px;\r\n}\r\n\r\n.mianContent .topCard {\r\n overflow: hidden;\r\n /* // border: 1px solid #DADBDE; */\r\n}\r\n\r\n.mianContent .topCard .topRow {\r\n display: flex;\r\n /* // line-height: 46px; */\r\n font-size: 14px;\r\n font-weight: 400;\r\n line-height: 32px;\r\n}\r\n\r\n.mianContent .topCard .topRow div:first-child {\r\n color: #333333;\r\n}\r\n\r\n.mianContent .topCard .topRow div:last-child {\r\n color: #777777;\r\n padding-left: 10px;\r\n}\r\n\r\n.mianContent .topCard .topRow div.process-mliv-dd {\r\n /* // height: 26px; */\r\n min-width: 30px;\r\n padding: 0px 16px;\r\n border-radius: 4px;\r\n background: #1389ff;\r\n color: #fff;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n margin-left: 10px;\r\n}\r\n\r\n.mianContent .tabs {\r\n /* // margin-bottom: 60px; */\r\n height: 0;\r\n flex: 1;\r\n overflow: visible !important;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.mianContent .tabs :deep(.is-active) {\r\n font-size: 16px;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content) {\r\n// height: calc(100% - 55px);\r\n// /* 修改BUGID:1003401 */\r\n// overflow: auto;\r\n// }\r\n.mianContent .tabs :deep(.el-tabs__header) {\r\n position: sticky;\r\n top: 0;\r\n background-color: #fff;\r\n z-index: 1997;\r\n}\r\n\r\n// .mianContent .tabs :deep(.el-tabs__content)::-webkit-scrollbar {\r\n// width: 0;\r\n// }\r\n\r\n.mianContent .topBtnRow {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n height: 100%;\r\n}\r\n\r\n.mianContent .footBtnRow {\r\n // display: flex;\r\n // justify-content: center;\r\n // align-items: center;\r\n // box-sizing: border-box;\r\n // // height: 100%;\r\n // position: fixed;\r\n // bottom: 0;\r\n // right: 20px;\r\n // height: 50px;\r\n // border-top: 1px solid #dadbde;\r\n // margin-top: 10px;\r\n // background-color: #fff;\r\n z-index: 1001;\r\n\r\n width: 100%;\r\n padding: 12px 0;\r\n background-color: #fff;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n -webkit-transition: 0.3s;\r\n transition: 0.3s;\r\n -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\r\n .el-button {\r\n min-width: 74px;\r\n height: 36px;\r\n border-radius: 6px;\r\n }\r\n}\r\n\r\n// .mianContent .footBtnRow {\r\n// display: flex;\r\n// justify-content: center;\r\n// align-items: center;\r\n// box-sizing: border-box;\r\n// // height: 100%;\r\n// position: fixed;\r\n// bottom: 0;\r\n// right: 20px;\r\n// height: 50px;\r\n// border-top: 1px solid #dadbde;\r\n// margin-top: 10px;\r\n// background-color: #fff;\r\n// z-index: 1001;\r\n// .el-button {\r\n// min-width: 74px;\r\n// height: 36px;\r\n// border-radius: 6px;\r\n// }\r\n// }\r\n\r\n.formInput {\r\n width: 90%;\r\n}\r\n\r\n.dialog :deep(.el-dialog__header) {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n}\r\n\r\n.dialog ::v-deep.el-dialog__body {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n padding-right: 10px;\r\n}\r\n\r\n.dialog :deep(.el-dialog__footer) {\r\n padding: 12px;\r\n text-align: center;\r\n}\r\n.dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n}\r\n\r\n.dialog {\r\n .el-dialog__body {\r\n padding: 45px 30px;\r\n }\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n.view-file {\r\n color: #1389ff;\r\n cursor: pointer;\r\n}\r\n.view-node-info {\r\n cursor: pointer;\r\n color: #1389ff;\r\n margin-left: 34px;\r\n font-size: 16px;\r\n}\r\n.iconsR {\r\n cursor: pointer;\r\n transform: rotate(90deg);\r\n}\r\n::v-deep .task .el-radio-group {\r\n .el-radio--small.is-bordered {\r\n margin: 0 20px;\r\n }\r\n .el-radio.is-bordered + .el-radio.is-bordered {\r\n margin: 5px 20px;\r\n }\r\n}\r\n.sign-img {\r\n width: 60px;\r\n height: 60px;\r\n}\r\n</style>\r\n"]}, media: undefined });
9309
10448
 
9310
10449
  };
9311
10450
  /* scoped */
9312
- const __vue_scope_id__$5 = "data-v-6c0aa992";
10451
+ const __vue_scope_id__$5 = "data-v-6177206d";
9313
10452
  /* module identifier */
9314
10453
  const __vue_module_identifier__$5 = undefined;
9315
10454
  /* functional template */
@@ -10208,6 +11347,7 @@ var script$2 = {
10208
11347
  info = {
10209
11348
  appId: "",
10210
11349
  businessCode: "",
11350
+ businessType: "",
10211
11351
  keyWord: "",
10212
11352
  businessDeptId: "",
10213
11353
  userInfo: {},
@@ -10220,7 +11360,7 @@ var script$2 = {
10220
11360
  this.revival = false;
10221
11361
  this._appId = info.appId;
10222
11362
  this._businessDeptId = info.businessDeptId;
10223
- this.businessCode = info.businessCode;
11363
+ this.businessCode = info.businessCode || info.businessType;
10224
11364
  this.userInfo = info.userInfo;
10225
11365
  // 获取部门id
10226
11366
  this.deptId = info.userInfo.deptId;
@@ -10807,12 +11947,12 @@ __vue_render__$2._withStripped = true;
10807
11947
  /* style */
10808
11948
  const __vue_inject_styles__$2 = function (inject) {
10809
11949
  if (!inject) return
10810
- inject("data-v-2b0fb27a_0", { source: ".flow-dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.flow-dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n overflow-x: hidden;\n}\n.flow-dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.flow-dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\beforeCreate.vue","beforeCreate.vue"],"names":[],"mappings":"AAm4BA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ACl4BA;ADs4BA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,kBAAA;ACn4BA;ADu4BA;EACA,wBAAA;EACA,kBAAA;ACp4BA;ADs4BA;EACA,SAAA;EACA,WAAA;ACp4BA;;AAEA,2CAA2C","file":"beforeCreate.vue","sourcesContent":["<template>\r\n <div>\r\n <el-dialog\r\n :visible.sync=\"flag\"\r\n width=\"45%\"\r\n class=\"flow-dialog\"\r\n :close-on-click-modal=\"false\"\r\n :title=\"revival ? '流程复活' : '创建并启动流程'\"\r\n append-to-body\r\n @closed=\"onClickCancel\"\r\n >\r\n <el-form\r\n class=\"create-form\"\r\n @submit.native.prevent\r\n label-width=\"200px\"\r\n status-icon\r\n >\r\n <el-form-item label=\"当前流程\" size=\"normal\" :rules=\"[{ required: true, message: '请选择流程' }]\">\r\n <el-select\r\n v-model=\"processDefId\"\r\n v-if=\"processDefList.length > 1\"\r\n style=\"width: 65%; margin-right: 10px\"\r\n filterable\r\n clearable\r\n @change=\"processDefChange\"\r\n placeholder=\"请选择\"\r\n >\r\n <el-option\r\n v-for=\"(item, index) in processDefList\"\r\n :key=\"item.id\"\r\n :label=\"item.name\"\r\n :value=\"item.id\"\r\n :disabled=\"item.disabled\"\r\n ></el-option>\r\n </el-select>\r\n <b class=\"process-def-name\" v-else>\r\n {{ processDefName }}\r\n </b>\r\n <div\r\n @click=\"viewFlowChart\"\r\n v-if=\"processDefId\"\r\n class=\"view-node-info\"\r\n style=\"margin-right: 10px\"\r\n >\r\n 预览\r\n </div>\r\n <div\r\n @click=\"viewFlowForecast\"\r\n v-if=\"processDefId && showFlowForecast\"\r\n class=\"view-node-info\">\r\n 流程预测\r\n </div>\r\n </el-form-item>\r\n\r\n <!-- 如果没有传入部门,则需要选择部门 -->\r\n <el-form-item v-if=\"!hasDeptId\" label=\"选择部门\" :rules=\"[{ required: true, message: '请选择部门' }]\">\r\n <selectDept\r\n class=\"dept-tree\"\r\n :deptId=\"deptId\"\r\n :ops=\"deptList\"\r\n @input=\"handleDeptChange\"\r\n />\r\n </el-form-item>\r\n\r\n <div class=\"node-list\" v-if=\"deptId\">\r\n <el-form-item\r\n v-if=\"processList && processList.length > 0\"\r\n label=\"下一步处理节点\"\r\n size=\"normal\"\r\n >\r\n </el-form-item>\r\n <template v-if=\"processList.length > 0\">\r\n <template v-for=\"(item, index) in processList\" >\r\n <userTask\r\n :index=\"index\"\r\n :personType=\"personType\"\r\n :personEntity=\"{ ...personEntity, _businessDeptId }\"\r\n :processNode=\"{\r\n ...item,\r\n REQUIRED: index == 0 ? true : false,\r\n }\"\r\n label=\"处理人\"\r\n :rules=\"[{ required: index == 0 ? true : false, message: '请选择审批人' }]\"\r\n :ref=\"setItemRef(item.id)\"\r\n @complete=\"complete\"\r\n ></userTask>\r\n <div class=\"user-task-split\" v-if=\"index !== processList.length - 1\"></div>\r\n </template>\r\n </template>\r\n\r\n <!-- <template v-if=\"otherProcessList.length > 0 && other\">\r\n <el-form-item\r\n v-if=\"processList && processList.length > 0\"\r\n label=\"其他处理节点\"\r\n size=\"normal\"\r\n >\r\n </el-form-item>\r\n\r\n <template v-if=\"processList.length > 0\">\r\n <userTask\r\n v-for=\"item in otherProcessList\"\r\n :personType=\"personType\"\r\n :personEntity=\"{ ...personEntity, _businessDeptId }\"\r\n :key=\"item.id\"\r\n :processNode=\"item\"\r\n :noprop=\"true\"\r\n :ref=\"setItemRef(item.id)\"\r\n ></userTask>\r\n </template>\r\n </template> -->\r\n </div>\r\n </el-form>\r\n <template #footer>\r\n <el-button\r\n :loading=\"btnLoading\"\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n >确 定</el-button\r\n >\r\n <el-button :loading=\"btnLoading\" @click=\"onClickCancel\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n\r\n <!-- <div class=\"dialog\"> -->\r\n <el-dialog\r\n :visible.sync=\"flowChartVisible\"\r\n width=\"60%\"\r\n append-to-body\r\n title=\"流程图信息\"\r\n class=\"track-view\"\r\n v-dialogDrag\r\n >\r\n <bpmnLook v-if=\"flowChartVisible && processXml\" ref=\"PreviewRef\" :diagram=\"processXml\"></bpmnLook>\r\n <!-- <iframe\r\n :src=\"trackUrl\"\r\n frameborder=\"0\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n /> -->\r\n <!-- <el-image :src=\"trackUrl\"></el-image> -->\r\n </el-dialog>\r\n\r\n <el-dialog\r\n :visible.sync=\"flowForecastVisible\"\r\n width=\"45%\"\r\n append-to-body\r\n title=\"流程预测\"\r\n v-dialogDrag\r\n @close=\"flowForecastClose\"\r\n >\r\n <div style=\"margin-left: 20px;\">\r\n <div v-html=\"flowForecastData.completeTime\" style=\"margin-left: 40px;margin-bottom: 20px;\"></div>\r\n <el-timeline>\r\n <el-timeline-item\r\n v-for=\"(activity, index) in flowForecastData.processBudgetModelList\"\r\n :key=\"index\"\r\n icon=\"el-icon-check\"\r\n :color=\"index==0 ? '#009800': activity.color\"\r\n :timestamp=\"activity.title\" placement=\"top\">\r\n <div>\r\n <span style=\"color:#009800;\">\r\n <i class=\"el-icon-s-custom\" style=\"margin-right: 5px;\"></i>\r\n 执行人:{{activity.excutor}}\r\n </span>\r\n </div>\r\n </el-timeline-item>\r\n </el-timeline> \r\n </div>\r\n </el-dialog>\r\n \r\n <!-- </div> -->\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from \"./api\";\r\nimport * as Enum from \"./enum\";\r\nimport userTask from \"./operation/userTask.vue\";\r\nimport { Message as ElMessage } from \"element-ui\";\r\nimport bpmnLook from \"./bpmnLook.vue\";\r\nimport selectDept from \"./operation/selectDept.vue\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { userTask, bpmnLook, selectDept },\r\n props: {\r\n extraReqParams: {\r\n type: Object,\r\n default: function() {\r\n return {}\r\n },\r\n },\r\n other: {\r\n default: true,\r\n },\r\n personType: \"\",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n beforeFunction:{\r\n type: Function,\r\n default: null\r\n },\r\n showFlowForecast: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n flowForecastFunction:{\r\n type: Function,\r\n default: null\r\n }\r\n },\r\n data() {\r\n return {\r\n revivalVars: {},\r\n processData: {},\r\n absoluteTaskId: '',\r\n userTaskListData: {},\r\n flag: false,\r\n revival: false,\r\n flowChartVisible: false,\r\n flowForecastVisible: false,\r\n flowForecastData:{\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n },\r\n flowForecastProcessInstId: '',\r\n btnLoading: false,\r\n processList: [],\r\n processDefId: \"\",\r\n processInstId: '',\r\n processDefName: \"\",\r\n businessId: \"\",\r\n trackUrl: \"\",\r\n processDefList: [],\r\n otherProcessList: [],\r\n callback: {},\r\n cancelCallBack: {},\r\n _multiNodeParticipant: [],\r\n _businessDeptId: \"\",\r\n businessCode: \"\",\r\n _vars: {},\r\n _appId: '',\r\n deptList: [],\r\n userInfo: {},\r\n hasDeptId: false,\r\n deptId: '',\r\n subjectId: '',\r\n processXml: '',\r\n };\r\n },\r\n provide () {\r\n return {\r\n getUserInfo: this.getUserInfo,\r\n }\r\n },\r\n methods: {\r\n getUserInfo () {\r\n return {\r\n deptId: this.deptId,\r\n subjectId: this.subjectId,\r\n }\r\n },\r\n handleDeptChange(val) {\r\n console.log(val, 'val')\r\n this.deptId = val\r\n this.getUserDataByDeptId()\r\n },\r\n complete(data) {\r\n console.log(data, 'complete')\r\n },\r\n setLoading(e) {\r\n this.btnLoading = e;\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, 'isxml')\r\n let res = {}\r\n let xml = ''\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, 'res')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async viewFlowChart() {\r\n this.flowChartVisible = true;\r\n this.processXml = await this.getXml(this.processDefId)\r\n // 打开预览窗口,后续代码不使用了\r\n if (Date.now()) return;\r\n api.repository\r\n .getDiagramUrl({\r\n processDefId: this.processDefId,\r\n diagramType: 1,\r\n type: Enum.SourceType.电脑端,\r\n })\r\n .then((res) => {\r\n res.data.url = 'http://localhost:2888/saber/#/flowPreview'\r\n this.trackUrl = this.getNewUrl(res.data.url, {...res.data})\r\n if (Date.now()) {\r\n this.flowChartVisible = true;\r\n return;\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n this.flowChartVisible = true;\r\n }\r\n });\r\n },\r\n // 判断url和当前网页的url域名是否相同\r\n isSameDomain(url) {\r\n return url.indexOf(window.location.host) != -1\r\n },\r\n // 根据url和query对象,拼接一个新的链接\r\n getNewUrl(url, query) {\r\n let queryStr = ''\r\n for (let key in query) {\r\n queryStr += `${key}=${query[key]}&`\r\n }\r\n // 判断url和当前网页的url域名是否相同\r\n if(!this.isSameDomain(url)){\r\n // 如果不同,则query要加上token,从localstorage获取\r\n let token = localStorage.getItem('token');\r\n queryStr += `token=${token}&`\r\n }\r\n queryStr = queryStr.slice(0, -1)\r\n return `${url}?${queryStr}`\r\n },\r\n viewFlowForecast(){\r\n if(this.flowForecastFunction){\r\n this.flowForecastFunction()\r\n }else {\r\n this.forecast({\r\n appId: this._appId ,\r\n title: '1',//title不能为空,随便传的一个值\r\n }) \r\n } \r\n },\r\n forecast(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .getProcessForecast({\r\n processDefId: this.processDefId,\r\n ...data,\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n if(e.data && e.data.processBudgetModelList && e.data.processBudgetModelList.length){\r\n this.flowForecastProcessInstId = e.data.processBudgetModelList[0].processInstId\r\n }else{\r\n e.data.processBudgetModelList = []\r\n this.flowForecastProcessInstId = ''\r\n }\r\n this.flowForecastData = e.data \r\n this.flowForecastVisible = true;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程预测失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n flowForecastClose(){\r\n if(this.flowForecastProcessInstId){\r\n api.pis\r\n .deleteProcessById(this.flowForecastProcessInstId)\r\n .then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.flowForecastVisible = false;\r\n this.flowForecastData = {\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n }\r\n this.flowForecastProcessInstId = ''\r\n }\r\n });\r\n }else{\r\n this.flowForecastVisible = false; \r\n this.flowForecastData = {\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n }\r\n }\r\n },\r\n processDefChange(processId) {\r\n this.processDefId = processId;\r\n api.repository.getFirstProcessNode(this.processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // // 获取部门id\r\n // const deptId = info.userInfo.deptId\r\n // this.deptId = deptId\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n // api.repository.getAfferentParticipantNodeList(processId).then((res) => {\r\n // if (res.code == Enum.apiCode.success) {\r\n // res.data.map((item) => {\r\n // item.type = \"UserTaskModel\";\r\n // });\r\n // this.processList = res.data;\r\n // let tmp = JSON.parse(JSON.stringify(res.data));\r\n // tmp.shift();\r\n // this.otherProcessList = tmp;\r\n // }\r\n // });\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = \"userTask\" + key;\r\n return this.userTaskListData[key];\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == \"任意指定\" ||\r\n humanPerformer == \"固定部门\" ||\r\n humanPerformer == \"固定单位\" ||\r\n humanPerformer == \"固定群组\"\r\n );\r\n },\r\n createAndStart(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .createAndStart({\r\n processDefId: this.processDefId,\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : '',\r\n // vars: this._businessDeptId\r\n // ? { _businessDeptId: this._businessDeptId, ...this._vars }\r\n // : this._vars,\r\n vars: {\r\n showType: \"all\",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程启动失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n revivalFlow(data = {}, history = false, msg = \"流程复活\") {\r\n console.log(msg, '流程复活')\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n const vars = {\r\n ...this.revivalVars,\r\n showType: \"all\",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n Object.keys(vars).forEach((key) => {\r\n // 字符串转小写\r\n const fk = key.toLowerCase();\r\n if (fk.includes('_')) {\r\n delete vars[key];\r\n }\r\n if (fk == 'appShow') {\r\n delete vars[key];\r\n }\r\n })\r\n api.pis\r\n .reactivate(\r\n {\r\n reactivate: true,\r\n processDefId: this.processDefId,\r\n processInstId: this.processInstId,\r\n isClearHistory: this.isClearHistory,\r\n // reactivateReason: \"重新提交\",\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : '',\r\n vars,\r\n },\r\n \"\",\r\n this.businessId,\r\n msg,\r\n \"\",\r\n history,\r\n this._multiNodeParticipant,\r\n this.extraReqParams,\r\n )\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程复活失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n Show(processDefId, appid = \"\", revival = false) {\r\n this.processList = [];\r\n this.revival = revival;\r\n this.processDefId = processDefId;\r\n\r\n if (appid) {\r\n api.repository.getProcessDefList(appid, \"\").then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n e.data.map((item) => {\r\n if (item.id == processDefId) {\r\n this.processDefName = item.name;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n\r\n this.callback = resolve;\r\n // api.repository\r\n // .getAfferentParticipantNodeList(processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n });\r\n },\r\n selectShow(\r\n info = {\r\n appId: \"\",\r\n businessCode: \"\",\r\n keyWord: \"\",\r\n businessDeptId: \"\",\r\n userInfo: {},\r\n }\r\n ) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.revival = false;\r\n this._appId = info.appId\r\n this._businessDeptId = info.businessDeptId;\r\n this.businessCode = info.businessCode\r\n this.userInfo = info.userInfo;\r\n // 获取部门id\r\n this.deptId = info.userInfo.deptId\r\n // 获取主体id\r\n this.subjectId = info.userInfo.subjectId\r\n this.hasDeptId = !!info.userInfo.deptId\r\n console.log('======_businessDeptId',this._businessDeptId);\r\n return new Promise((resolve, reject) => {\r\n console.log(reject, 'reject')\r\n this.cancelCallBack = reject;\r\n api.repository\r\n .getProcessDefListNew(info)\r\n .then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n if (e.data.length == 1) {\r\n this.processDefList = e.data;\r\n this.processDefId = e.data[0].id;\r\n this.processDefName = e.data[0].name;\r\n api.repository\r\n .getFirstProcessNode(this.processDefId)\r\n .then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n console.log(res, 'res')\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n \r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n } else {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.processDefList = e.data;\r\n\r\n if (info.keyWord) {\r\n this.processDefList.map((item) => {\r\n if (\r\n item.name.indexOf(info.keyWord) != -1 &&\r\n !this.processDefId\r\n ) {\r\n this.processDefId = item.id;\r\n this.processDefName = item.name;\r\n this.processDefChange(item.id);\r\n }\r\n });\r\n }\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n }\r\n });\r\n });\r\n },\r\n // 处理routeTxt\r\n handleRouteTxt(item) {\r\n let str\r\n // 交集\r\n if (item.assigneeRetain == true) {\r\n return \r\n }\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n // 获取节点人员的部门\r\n async getNodeUserDept() {\r\n let res = {}\r\n try {\r\n res = await api.user.getSelectTree()\r\n console.log(res, 'res')\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n console.log(res.data, 'data')\r\n this.deptList = res.data || []\r\n },\r\n\r\n listShow(list) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.revival = false;\r\n return new Promise((resolve, reject) => {\r\n if (list.length == 1) {\r\n this.processDefId = list[0].id;\r\n this.processDefName = list[0].name;\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(this.processDefId).then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n api.repository\r\n .getAfferentParticipantNodeList(this.processDefId)\r\n .then((e) => {\r\n this.otherProcessList = e.data.filter((el) => {\r\n return el[\"id\"] != this.processList[0][\"id\"];\r\n });\r\n this.otherProcessList.map((el) => {\r\n el[\"REQUIRED\"] = false;\r\n });\r\n });\r\n }\r\n });\r\n } else {\r\n this.processDefList = list;\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n });\r\n },\r\n // 流程\r\n async getProcessInfo({ taskId, processInstId }) {\r\n\r\n let res = {};\r\n try {\r\n res = await api.tis.getTaskModelDetail(taskId ? {\r\n processInstId,\r\n taskId,\r\n } : {\r\n processInstId,\r\n })\r\n } catch (e) {\r\n res = {}\r\n }\r\n \r\n if (res.code == 200) {\r\n \r\n }\r\n return res\r\n },\r\n async revivalShow({ processInstId, businessId, taskId, deptId }) {\r\n this.processInstId = processInstId\r\n this.hasDeptId = !!deptId\r\n let res = await this.getProcessInfo({ taskId, processInstId })\r\n // let res = await api.pis.getProcessInstanceByBusinessKey(businessId);\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n this._businessDeptId = deptId\r\n this.hasDeptId = !!deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, 'id')\r\n\r\n this.revival = true;\r\n this.businessId = businessId;\r\n this.subjectId = res.data.process.variables.subjectId\r\n this.businessCode = res.data.process.variables.businessType\r\n this.revivalVars = res.data.process.variables;\r\n\r\n this.processDefId = res.data.process.processDefinitionId;\r\n this.processDefName = res.data.process.processDefinitionName;\r\n this.processDefList = [];\r\n \r\n return this.Show(res.data.process.processDefinitionId, \"\", true);\r\n }\r\n \r\n },\r\n onClickOperation() {\r\n if(!this.processDefId || this.processDefId==''){\r\n ElMessage.warning(\"请选择流程\");\r\n return false;\r\n }\r\n let multiNodeParticipant = {},\r\n vars = {};\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o][0];\r\n let res = refCom\r\n ? refCom.getValue()\r\n : { multiNodeParticipant: [], vars: {} };\r\n if (!res) {\r\n return false;\r\n }\r\n console.log(res, 'res')\r\n multiNodeParticipant = {\r\n ...multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n vars = { ...vars, ...res.vars };\r\n console.log(vars, 'vars')\r\n }\r\n this._multiNodeParticipant = multiNodeParticipant;\r\n this._vars = vars;\r\n if(this.beforeFunction){\r\n this.beforeFunction()\r\n }else if (this.callback) {\r\n this.callback(this.revival ? this.revivalFlow : this.createAndStart);\r\n }\r\n // this.flag = false;\r\n },\r\n onClickCancel() {\r\n this.flag = false;\r\n this.btnLoading = false;\r\n if (this.cancelCallBack) this.cancelCallBack();\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.flow-dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.flow-dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n overflow-x: hidden;\r\n}\r\n\r\n.flow-dialog {\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\" scoped>\r\n.dept-tree {\r\n width: 65%;\r\n}\r\n\r\n.process-def-name {\r\n font-weight: bold;\r\n margin-right: 20px;\r\n font-size: 16px;\r\n}\r\n.view-node-info {\r\n display: inline-block;\r\n cursor: pointer;\r\n color: #1389ff;\r\n font-size: 14px;\r\n margin: 0;\r\n}\r\n\r\n.create-form {\r\n .el-form-item__label {\r\n padding-right: 18px;\r\n }\r\n .el-form-item {\r\n margin-bottom: 10px;\r\n }\r\n}\r\n.node-list {\r\n max-height: 300px;\r\n overflow-y: scroll;\r\n}\r\n.track-view {\r\n .el-dialog__body {\r\n display: flex;\r\n justify-content: center;\r\n height: 600px;\r\n position: relative;\r\n }\r\n}\r\niframe {\r\n min-height: 500px;\r\n}\r\n</style>\r\n",".flow-dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n\n.flow-dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n overflow-x: hidden;\n}\n\n.flow-dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.flow-dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */"]}, media: undefined })
10811
- ,inject("data-v-2b0fb27a_1", { source: ".dept-tree[data-v-2b0fb27a] {\n width: 65%;\n}\n.process-def-name[data-v-2b0fb27a] {\n font-weight: bold;\n margin-right: 20px;\n font-size: 16px;\n}\n.view-node-info[data-v-2b0fb27a] {\n display: inline-block;\n cursor: pointer;\n color: #1389ff;\n font-size: 14px;\n margin: 0;\n}\n.create-form .el-form-item__label[data-v-2b0fb27a] {\n padding-right: 18px;\n}\n.create-form .el-form-item[data-v-2b0fb27a] {\n margin-bottom: 10px;\n}\n.node-list[data-v-2b0fb27a] {\n max-height: 300px;\n overflow-y: scroll;\n}\n.track-view .el-dialog__body[data-v-2b0fb27a] {\n display: flex;\n justify-content: center;\n height: 600px;\n position: relative;\n}\niframe[data-v-2b0fb27a] {\n min-height: 500px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\beforeCreate.vue","beforeCreate.vue"],"names":[],"mappings":"AAg6BA;EACA,UAAA;AC/5BA;ADk6BA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;AC/5BA;ADi6BA;EACA,qBAAA;EACA,eAAA;EACA,cAAA;EACA,eAAA;EACA,SAAA;AC95BA;ADk6BA;EACA,mBAAA;AC/5BA;ADi6BA;EACA,mBAAA;AC/5BA;ADk6BA;EACA,iBAAA;EACA,kBAAA;AC/5BA;ADk6BA;EACA,aAAA;EACA,uBAAA;EACA,aAAA;EACA,kBAAA;AC/5BA;ADk6BA;EACA,iBAAA;AC/5BA;;AAEA,2CAA2C","file":"beforeCreate.vue","sourcesContent":["<template>\r\n <div>\r\n <el-dialog\r\n :visible.sync=\"flag\"\r\n width=\"45%\"\r\n class=\"flow-dialog\"\r\n :close-on-click-modal=\"false\"\r\n :title=\"revival ? '流程复活' : '创建并启动流程'\"\r\n append-to-body\r\n @closed=\"onClickCancel\"\r\n >\r\n <el-form\r\n class=\"create-form\"\r\n @submit.native.prevent\r\n label-width=\"200px\"\r\n status-icon\r\n >\r\n <el-form-item label=\"当前流程\" size=\"normal\" :rules=\"[{ required: true, message: '请选择流程' }]\">\r\n <el-select\r\n v-model=\"processDefId\"\r\n v-if=\"processDefList.length > 1\"\r\n style=\"width: 65%; margin-right: 10px\"\r\n filterable\r\n clearable\r\n @change=\"processDefChange\"\r\n placeholder=\"请选择\"\r\n >\r\n <el-option\r\n v-for=\"(item, index) in processDefList\"\r\n :key=\"item.id\"\r\n :label=\"item.name\"\r\n :value=\"item.id\"\r\n :disabled=\"item.disabled\"\r\n ></el-option>\r\n </el-select>\r\n <b class=\"process-def-name\" v-else>\r\n {{ processDefName }}\r\n </b>\r\n <div\r\n @click=\"viewFlowChart\"\r\n v-if=\"processDefId\"\r\n class=\"view-node-info\"\r\n style=\"margin-right: 10px\"\r\n >\r\n 预览\r\n </div>\r\n <div\r\n @click=\"viewFlowForecast\"\r\n v-if=\"processDefId && showFlowForecast\"\r\n class=\"view-node-info\">\r\n 流程预测\r\n </div>\r\n </el-form-item>\r\n\r\n <!-- 如果没有传入部门,则需要选择部门 -->\r\n <el-form-item v-if=\"!hasDeptId\" label=\"选择部门\" :rules=\"[{ required: true, message: '请选择部门' }]\">\r\n <selectDept\r\n class=\"dept-tree\"\r\n :deptId=\"deptId\"\r\n :ops=\"deptList\"\r\n @input=\"handleDeptChange\"\r\n />\r\n </el-form-item>\r\n\r\n <div class=\"node-list\" v-if=\"deptId\">\r\n <el-form-item\r\n v-if=\"processList && processList.length > 0\"\r\n label=\"下一步处理节点\"\r\n size=\"normal\"\r\n >\r\n </el-form-item>\r\n <template v-if=\"processList.length > 0\">\r\n <template v-for=\"(item, index) in processList\" >\r\n <userTask\r\n :index=\"index\"\r\n :personType=\"personType\"\r\n :personEntity=\"{ ...personEntity, _businessDeptId }\"\r\n :processNode=\"{\r\n ...item,\r\n REQUIRED: index == 0 ? true : false,\r\n }\"\r\n label=\"处理人\"\r\n :rules=\"[{ required: index == 0 ? true : false, message: '请选择审批人' }]\"\r\n :ref=\"setItemRef(item.id)\"\r\n @complete=\"complete\"\r\n ></userTask>\r\n <div class=\"user-task-split\" v-if=\"index !== processList.length - 1\"></div>\r\n </template>\r\n </template>\r\n\r\n <!-- <template v-if=\"otherProcessList.length > 0 && other\">\r\n <el-form-item\r\n v-if=\"processList && processList.length > 0\"\r\n label=\"其他处理节点\"\r\n size=\"normal\"\r\n >\r\n </el-form-item>\r\n\r\n <template v-if=\"processList.length > 0\">\r\n <userTask\r\n v-for=\"item in otherProcessList\"\r\n :personType=\"personType\"\r\n :personEntity=\"{ ...personEntity, _businessDeptId }\"\r\n :key=\"item.id\"\r\n :processNode=\"item\"\r\n :noprop=\"true\"\r\n :ref=\"setItemRef(item.id)\"\r\n ></userTask>\r\n </template>\r\n </template> -->\r\n </div>\r\n </el-form>\r\n <template #footer>\r\n <el-button\r\n :loading=\"btnLoading\"\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n >确 定</el-button\r\n >\r\n <el-button :loading=\"btnLoading\" @click=\"onClickCancel\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n\r\n <!-- <div class=\"dialog\"> -->\r\n <el-dialog\r\n :visible.sync=\"flowChartVisible\"\r\n width=\"60%\"\r\n append-to-body\r\n title=\"流程图信息\"\r\n class=\"track-view\"\r\n v-dialogDrag\r\n >\r\n <bpmnLook v-if=\"flowChartVisible && processXml\" ref=\"PreviewRef\" :diagram=\"processXml\"></bpmnLook>\r\n <!-- <iframe\r\n :src=\"trackUrl\"\r\n frameborder=\"0\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n /> -->\r\n <!-- <el-image :src=\"trackUrl\"></el-image> -->\r\n </el-dialog>\r\n\r\n <el-dialog\r\n :visible.sync=\"flowForecastVisible\"\r\n width=\"45%\"\r\n append-to-body\r\n title=\"流程预测\"\r\n v-dialogDrag\r\n @close=\"flowForecastClose\"\r\n >\r\n <div style=\"margin-left: 20px;\">\r\n <div v-html=\"flowForecastData.completeTime\" style=\"margin-left: 40px;margin-bottom: 20px;\"></div>\r\n <el-timeline>\r\n <el-timeline-item\r\n v-for=\"(activity, index) in flowForecastData.processBudgetModelList\"\r\n :key=\"index\"\r\n icon=\"el-icon-check\"\r\n :color=\"index==0 ? '#009800': activity.color\"\r\n :timestamp=\"activity.title\" placement=\"top\">\r\n <div>\r\n <span style=\"color:#009800;\">\r\n <i class=\"el-icon-s-custom\" style=\"margin-right: 5px;\"></i>\r\n 执行人:{{activity.excutor}}\r\n </span>\r\n </div>\r\n </el-timeline-item>\r\n </el-timeline> \r\n </div>\r\n </el-dialog>\r\n \r\n <!-- </div> -->\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from \"./api\";\r\nimport * as Enum from \"./enum\";\r\nimport userTask from \"./operation/userTask.vue\";\r\nimport { Message as ElMessage } from \"element-ui\";\r\nimport bpmnLook from \"./bpmnLook.vue\";\r\nimport selectDept from \"./operation/selectDept.vue\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { userTask, bpmnLook, selectDept },\r\n props: {\r\n extraReqParams: {\r\n type: Object,\r\n default: function() {\r\n return {}\r\n },\r\n },\r\n other: {\r\n default: true,\r\n },\r\n personType: \"\",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n beforeFunction:{\r\n type: Function,\r\n default: null\r\n },\r\n showFlowForecast: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n flowForecastFunction:{\r\n type: Function,\r\n default: null\r\n }\r\n },\r\n data() {\r\n return {\r\n revivalVars: {},\r\n processData: {},\r\n absoluteTaskId: '',\r\n userTaskListData: {},\r\n flag: false,\r\n revival: false,\r\n flowChartVisible: false,\r\n flowForecastVisible: false,\r\n flowForecastData:{\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n },\r\n flowForecastProcessInstId: '',\r\n btnLoading: false,\r\n processList: [],\r\n processDefId: \"\",\r\n processInstId: '',\r\n processDefName: \"\",\r\n businessId: \"\",\r\n trackUrl: \"\",\r\n processDefList: [],\r\n otherProcessList: [],\r\n callback: {},\r\n cancelCallBack: {},\r\n _multiNodeParticipant: [],\r\n _businessDeptId: \"\",\r\n businessCode: \"\",\r\n _vars: {},\r\n _appId: '',\r\n deptList: [],\r\n userInfo: {},\r\n hasDeptId: false,\r\n deptId: '',\r\n subjectId: '',\r\n processXml: '',\r\n };\r\n },\r\n provide () {\r\n return {\r\n getUserInfo: this.getUserInfo,\r\n }\r\n },\r\n methods: {\r\n getUserInfo () {\r\n return {\r\n deptId: this.deptId,\r\n subjectId: this.subjectId,\r\n }\r\n },\r\n handleDeptChange(val) {\r\n console.log(val, 'val')\r\n this.deptId = val\r\n this.getUserDataByDeptId()\r\n },\r\n complete(data) {\r\n console.log(data, 'complete')\r\n },\r\n setLoading(e) {\r\n this.btnLoading = e;\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, 'isxml')\r\n let res = {}\r\n let xml = ''\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, 'res')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async viewFlowChart() {\r\n this.flowChartVisible = true;\r\n this.processXml = await this.getXml(this.processDefId)\r\n // 打开预览窗口,后续代码不使用了\r\n if (Date.now()) return;\r\n api.repository\r\n .getDiagramUrl({\r\n processDefId: this.processDefId,\r\n diagramType: 1,\r\n type: Enum.SourceType.电脑端,\r\n })\r\n .then((res) => {\r\n res.data.url = 'http://localhost:2888/saber/#/flowPreview'\r\n this.trackUrl = this.getNewUrl(res.data.url, {...res.data})\r\n if (Date.now()) {\r\n this.flowChartVisible = true;\r\n return;\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n this.flowChartVisible = true;\r\n }\r\n });\r\n },\r\n // 判断url和当前网页的url域名是否相同\r\n isSameDomain(url) {\r\n return url.indexOf(window.location.host) != -1\r\n },\r\n // 根据url和query对象,拼接一个新的链接\r\n getNewUrl(url, query) {\r\n let queryStr = ''\r\n for (let key in query) {\r\n queryStr += `${key}=${query[key]}&`\r\n }\r\n // 判断url和当前网页的url域名是否相同\r\n if(!this.isSameDomain(url)){\r\n // 如果不同,则query要加上token,从localstorage获取\r\n let token = localStorage.getItem('token');\r\n queryStr += `token=${token}&`\r\n }\r\n queryStr = queryStr.slice(0, -1)\r\n return `${url}?${queryStr}`\r\n },\r\n viewFlowForecast(){\r\n if(this.flowForecastFunction){\r\n this.flowForecastFunction()\r\n }else {\r\n this.forecast({\r\n appId: this._appId ,\r\n title: '1',//title不能为空,随便传的一个值\r\n }) \r\n } \r\n },\r\n forecast(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .getProcessForecast({\r\n processDefId: this.processDefId,\r\n ...data,\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n if(e.data && e.data.processBudgetModelList && e.data.processBudgetModelList.length){\r\n this.flowForecastProcessInstId = e.data.processBudgetModelList[0].processInstId\r\n }else{\r\n e.data.processBudgetModelList = []\r\n this.flowForecastProcessInstId = ''\r\n }\r\n this.flowForecastData = e.data \r\n this.flowForecastVisible = true;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程预测失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n flowForecastClose(){\r\n if(this.flowForecastProcessInstId){\r\n api.pis\r\n .deleteProcessById(this.flowForecastProcessInstId)\r\n .then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.flowForecastVisible = false;\r\n this.flowForecastData = {\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n }\r\n this.flowForecastProcessInstId = ''\r\n }\r\n });\r\n }else{\r\n this.flowForecastVisible = false; \r\n this.flowForecastData = {\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n }\r\n }\r\n },\r\n processDefChange(processId) {\r\n this.processDefId = processId;\r\n api.repository.getFirstProcessNode(this.processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // // 获取部门id\r\n // const deptId = info.userInfo.deptId\r\n // this.deptId = deptId\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n // api.repository.getAfferentParticipantNodeList(processId).then((res) => {\r\n // if (res.code == Enum.apiCode.success) {\r\n // res.data.map((item) => {\r\n // item.type = \"UserTaskModel\";\r\n // });\r\n // this.processList = res.data;\r\n // let tmp = JSON.parse(JSON.stringify(res.data));\r\n // tmp.shift();\r\n // this.otherProcessList = tmp;\r\n // }\r\n // });\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = \"userTask\" + key;\r\n return this.userTaskListData[key];\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == \"任意指定\" ||\r\n humanPerformer == \"固定部门\" ||\r\n humanPerformer == \"固定单位\" ||\r\n humanPerformer == \"固定群组\"\r\n );\r\n },\r\n createAndStart(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .createAndStart({\r\n processDefId: this.processDefId,\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : '',\r\n // vars: this._businessDeptId\r\n // ? { _businessDeptId: this._businessDeptId, ...this._vars }\r\n // : this._vars,\r\n vars: {\r\n showType: \"all\",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程启动失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n revivalFlow(data = {}, history = false, msg = \"流程复活\") {\r\n console.log(msg, '流程复活')\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n const vars = {\r\n ...this.revivalVars,\r\n showType: \"all\",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n Object.keys(vars).forEach((key) => {\r\n // 字符串转小写\r\n const fk = key.toLowerCase();\r\n if (fk.includes('_')) {\r\n delete vars[key];\r\n }\r\n if (fk == 'appShow') {\r\n delete vars[key];\r\n }\r\n })\r\n api.pis\r\n .reactivate(\r\n {\r\n reactivate: true,\r\n processDefId: this.processDefId,\r\n processInstId: this.processInstId,\r\n isClearHistory: this.isClearHistory,\r\n // reactivateReason: \"重新提交\",\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : '',\r\n vars,\r\n },\r\n \"\",\r\n this.businessId,\r\n msg,\r\n \"\",\r\n history,\r\n this._multiNodeParticipant,\r\n this.extraReqParams,\r\n )\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程复活失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n Show(processDefId, appid = \"\", revival = false) {\r\n this.processList = [];\r\n this.revival = revival;\r\n this.processDefId = processDefId;\r\n\r\n if (appid) {\r\n api.repository.getProcessDefList(appid, \"\").then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n e.data.map((item) => {\r\n if (item.id == processDefId) {\r\n this.processDefName = item.name;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n\r\n this.callback = resolve;\r\n // api.repository\r\n // .getAfferentParticipantNodeList(processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n });\r\n },\r\n selectShow(\r\n info = {\r\n appId: \"\",\r\n businessCode: \"\",\r\n keyWord: \"\",\r\n businessDeptId: \"\",\r\n userInfo: {},\r\n }\r\n ) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.revival = false;\r\n this._appId = info.appId\r\n this._businessDeptId = info.businessDeptId;\r\n this.businessCode = info.businessCode\r\n this.userInfo = info.userInfo;\r\n // 获取部门id\r\n this.deptId = info.userInfo.deptId\r\n // 获取主体id\r\n this.subjectId = info.userInfo.subjectId\r\n this.hasDeptId = !!info.userInfo.deptId\r\n console.log('======_businessDeptId',this._businessDeptId);\r\n return new Promise((resolve, reject) => {\r\n console.log(reject, 'reject')\r\n this.cancelCallBack = reject;\r\n api.repository\r\n .getProcessDefListNew(info)\r\n .then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n if (e.data.length == 1) {\r\n this.processDefList = e.data;\r\n this.processDefId = e.data[0].id;\r\n this.processDefName = e.data[0].name;\r\n api.repository\r\n .getFirstProcessNode(this.processDefId)\r\n .then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n console.log(res, 'res')\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n \r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n } else {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.processDefList = e.data;\r\n\r\n if (info.keyWord) {\r\n this.processDefList.map((item) => {\r\n if (\r\n item.name.indexOf(info.keyWord) != -1 &&\r\n !this.processDefId\r\n ) {\r\n this.processDefId = item.id;\r\n this.processDefName = item.name;\r\n this.processDefChange(item.id);\r\n }\r\n });\r\n }\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n }\r\n });\r\n });\r\n },\r\n // 处理routeTxt\r\n handleRouteTxt(item) {\r\n let str\r\n // 交集\r\n if (item.assigneeRetain == true) {\r\n return \r\n }\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n // 获取节点人员的部门\r\n async getNodeUserDept() {\r\n let res = {}\r\n try {\r\n res = await api.user.getSelectTree()\r\n console.log(res, 'res')\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n console.log(res.data, 'data')\r\n this.deptList = res.data || []\r\n },\r\n\r\n listShow(list) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.revival = false;\r\n return new Promise((resolve, reject) => {\r\n if (list.length == 1) {\r\n this.processDefId = list[0].id;\r\n this.processDefName = list[0].name;\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(this.processDefId).then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n api.repository\r\n .getAfferentParticipantNodeList(this.processDefId)\r\n .then((e) => {\r\n this.otherProcessList = e.data.filter((el) => {\r\n return el[\"id\"] != this.processList[0][\"id\"];\r\n });\r\n this.otherProcessList.map((el) => {\r\n el[\"REQUIRED\"] = false;\r\n });\r\n });\r\n }\r\n });\r\n } else {\r\n this.processDefList = list;\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n });\r\n },\r\n // 流程\r\n async getProcessInfo({ taskId, processInstId }) {\r\n\r\n let res = {};\r\n try {\r\n res = await api.tis.getTaskModelDetail(taskId ? {\r\n processInstId,\r\n taskId,\r\n } : {\r\n processInstId,\r\n })\r\n } catch (e) {\r\n res = {}\r\n }\r\n \r\n if (res.code == 200) {\r\n \r\n }\r\n return res\r\n },\r\n async revivalShow({ processInstId, businessId, taskId, deptId }) {\r\n this.processInstId = processInstId\r\n this.hasDeptId = !!deptId\r\n let res = await this.getProcessInfo({ taskId, processInstId })\r\n // let res = await api.pis.getProcessInstanceByBusinessKey(businessId);\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n this._businessDeptId = deptId\r\n this.hasDeptId = !!deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, 'id')\r\n\r\n this.revival = true;\r\n this.businessId = businessId;\r\n this.subjectId = res.data.process.variables.subjectId\r\n this.businessCode = res.data.process.variables.businessType\r\n this.revivalVars = res.data.process.variables;\r\n\r\n this.processDefId = res.data.process.processDefinitionId;\r\n this.processDefName = res.data.process.processDefinitionName;\r\n this.processDefList = [];\r\n \r\n return this.Show(res.data.process.processDefinitionId, \"\", true);\r\n }\r\n \r\n },\r\n onClickOperation() {\r\n if(!this.processDefId || this.processDefId==''){\r\n ElMessage.warning(\"请选择流程\");\r\n return false;\r\n }\r\n let multiNodeParticipant = {},\r\n vars = {};\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o][0];\r\n let res = refCom\r\n ? refCom.getValue()\r\n : { multiNodeParticipant: [], vars: {} };\r\n if (!res) {\r\n return false;\r\n }\r\n console.log(res, 'res')\r\n multiNodeParticipant = {\r\n ...multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n vars = { ...vars, ...res.vars };\r\n console.log(vars, 'vars')\r\n }\r\n this._multiNodeParticipant = multiNodeParticipant;\r\n this._vars = vars;\r\n if(this.beforeFunction){\r\n this.beforeFunction()\r\n }else if (this.callback) {\r\n this.callback(this.revival ? this.revivalFlow : this.createAndStart);\r\n }\r\n // this.flag = false;\r\n },\r\n onClickCancel() {\r\n this.flag = false;\r\n this.btnLoading = false;\r\n if (this.cancelCallBack) this.cancelCallBack();\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.flow-dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.flow-dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n overflow-x: hidden;\r\n}\r\n\r\n.flow-dialog {\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\" scoped>\r\n.dept-tree {\r\n width: 65%;\r\n}\r\n\r\n.process-def-name {\r\n font-weight: bold;\r\n margin-right: 20px;\r\n font-size: 16px;\r\n}\r\n.view-node-info {\r\n display: inline-block;\r\n cursor: pointer;\r\n color: #1389ff;\r\n font-size: 14px;\r\n margin: 0;\r\n}\r\n\r\n.create-form {\r\n .el-form-item__label {\r\n padding-right: 18px;\r\n }\r\n .el-form-item {\r\n margin-bottom: 10px;\r\n }\r\n}\r\n.node-list {\r\n max-height: 300px;\r\n overflow-y: scroll;\r\n}\r\n.track-view {\r\n .el-dialog__body {\r\n display: flex;\r\n justify-content: center;\r\n height: 600px;\r\n position: relative;\r\n }\r\n}\r\niframe {\r\n min-height: 500px;\r\n}\r\n</style>\r\n",".dept-tree {\n width: 65%;\n}\n\n.process-def-name {\n font-weight: bold;\n margin-right: 20px;\n font-size: 16px;\n}\n\n.view-node-info {\n display: inline-block;\n cursor: pointer;\n color: #1389ff;\n font-size: 14px;\n margin: 0;\n}\n\n.create-form .el-form-item__label {\n padding-right: 18px;\n}\n.create-form .el-form-item {\n margin-bottom: 10px;\n}\n\n.node-list {\n max-height: 300px;\n overflow-y: scroll;\n}\n\n.track-view .el-dialog__body {\n display: flex;\n justify-content: center;\n height: 600px;\n position: relative;\n}\n\niframe {\n min-height: 500px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */"]}, media: undefined });
11950
+ inject("data-v-1b8bde7a_0", { source: ".flow-dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n.flow-dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n overflow-x: hidden;\n}\n.flow-dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.flow-dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\beforeCreate.vue","beforeCreate.vue"],"names":[],"mappings":"AAo4BA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,aAAA;EACA,mBAAA;ACn4BA;ADu4BA;EACA,6BAAA;EACA,gCAAA;EACA,iBAAA;EACA,kBAAA;ACp4BA;ADw4BA;EACA,wBAAA;EACA,kBAAA;ACr4BA;ADu4BA;EACA,SAAA;EACA,WAAA;ACr4BA;;AAEA,2CAA2C","file":"beforeCreate.vue","sourcesContent":["<template>\r\n <div>\r\n <el-dialog\r\n :visible.sync=\"flag\"\r\n width=\"45%\"\r\n class=\"flow-dialog\"\r\n :close-on-click-modal=\"false\"\r\n :title=\"revival ? '流程复活' : '创建并启动流程'\"\r\n append-to-body\r\n @closed=\"onClickCancel\"\r\n >\r\n <el-form\r\n class=\"create-form\"\r\n @submit.native.prevent\r\n label-width=\"200px\"\r\n status-icon\r\n >\r\n <el-form-item label=\"当前流程\" size=\"normal\" :rules=\"[{ required: true, message: '请选择流程' }]\">\r\n <el-select\r\n v-model=\"processDefId\"\r\n v-if=\"processDefList.length > 1\"\r\n style=\"width: 65%; margin-right: 10px\"\r\n filterable\r\n clearable\r\n @change=\"processDefChange\"\r\n placeholder=\"请选择\"\r\n >\r\n <el-option\r\n v-for=\"(item, index) in processDefList\"\r\n :key=\"item.id\"\r\n :label=\"item.name\"\r\n :value=\"item.id\"\r\n :disabled=\"item.disabled\"\r\n ></el-option>\r\n </el-select>\r\n <b class=\"process-def-name\" v-else>\r\n {{ processDefName }}\r\n </b>\r\n <div\r\n @click=\"viewFlowChart\"\r\n v-if=\"processDefId\"\r\n class=\"view-node-info\"\r\n style=\"margin-right: 10px\"\r\n >\r\n 预览\r\n </div>\r\n <div\r\n @click=\"viewFlowForecast\"\r\n v-if=\"processDefId && showFlowForecast\"\r\n class=\"view-node-info\">\r\n 流程预测\r\n </div>\r\n </el-form-item>\r\n\r\n <!-- 如果没有传入部门,则需要选择部门 -->\r\n <el-form-item v-if=\"!hasDeptId\" label=\"选择部门\" :rules=\"[{ required: true, message: '请选择部门' }]\">\r\n <selectDept\r\n class=\"dept-tree\"\r\n :deptId=\"deptId\"\r\n :ops=\"deptList\"\r\n @input=\"handleDeptChange\"\r\n />\r\n </el-form-item>\r\n\r\n <div class=\"node-list\" v-if=\"deptId\">\r\n <el-form-item\r\n v-if=\"processList && processList.length > 0\"\r\n label=\"下一步处理节点\"\r\n size=\"normal\"\r\n >\r\n </el-form-item>\r\n <template v-if=\"processList.length > 0\">\r\n <template v-for=\"(item, index) in processList\" >\r\n <userTask\r\n :index=\"index\"\r\n :personType=\"personType\"\r\n :personEntity=\"{ ...personEntity, _businessDeptId }\"\r\n :processNode=\"{\r\n ...item,\r\n REQUIRED: index == 0 ? true : false,\r\n }\"\r\n label=\"处理人\"\r\n :rules=\"[{ required: index == 0 ? true : false, message: '请选择审批人' }]\"\r\n :ref=\"setItemRef(item.id)\"\r\n @complete=\"complete\"\r\n ></userTask>\r\n <div class=\"user-task-split\" v-if=\"index !== processList.length - 1\"></div>\r\n </template>\r\n </template>\r\n\r\n <!-- <template v-if=\"otherProcessList.length > 0 && other\">\r\n <el-form-item\r\n v-if=\"processList && processList.length > 0\"\r\n label=\"其他处理节点\"\r\n size=\"normal\"\r\n >\r\n </el-form-item>\r\n\r\n <template v-if=\"processList.length > 0\">\r\n <userTask\r\n v-for=\"item in otherProcessList\"\r\n :personType=\"personType\"\r\n :personEntity=\"{ ...personEntity, _businessDeptId }\"\r\n :key=\"item.id\"\r\n :processNode=\"item\"\r\n :noprop=\"true\"\r\n :ref=\"setItemRef(item.id)\"\r\n ></userTask>\r\n </template>\r\n </template> -->\r\n </div>\r\n </el-form>\r\n <template #footer>\r\n <el-button\r\n :loading=\"btnLoading\"\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n >确 定</el-button\r\n >\r\n <el-button :loading=\"btnLoading\" @click=\"onClickCancel\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n\r\n <!-- <div class=\"dialog\"> -->\r\n <el-dialog\r\n :visible.sync=\"flowChartVisible\"\r\n width=\"60%\"\r\n append-to-body\r\n title=\"流程图信息\"\r\n class=\"track-view\"\r\n v-dialogDrag\r\n >\r\n <bpmnLook v-if=\"flowChartVisible && processXml\" ref=\"PreviewRef\" :diagram=\"processXml\"></bpmnLook>\r\n <!-- <iframe\r\n :src=\"trackUrl\"\r\n frameborder=\"0\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n /> -->\r\n <!-- <el-image :src=\"trackUrl\"></el-image> -->\r\n </el-dialog>\r\n\r\n <el-dialog\r\n :visible.sync=\"flowForecastVisible\"\r\n width=\"45%\"\r\n append-to-body\r\n title=\"流程预测\"\r\n v-dialogDrag\r\n @close=\"flowForecastClose\"\r\n >\r\n <div style=\"margin-left: 20px;\">\r\n <div v-html=\"flowForecastData.completeTime\" style=\"margin-left: 40px;margin-bottom: 20px;\"></div>\r\n <el-timeline>\r\n <el-timeline-item\r\n v-for=\"(activity, index) in flowForecastData.processBudgetModelList\"\r\n :key=\"index\"\r\n icon=\"el-icon-check\"\r\n :color=\"index==0 ? '#009800': activity.color\"\r\n :timestamp=\"activity.title\" placement=\"top\">\r\n <div>\r\n <span style=\"color:#009800;\">\r\n <i class=\"el-icon-s-custom\" style=\"margin-right: 5px;\"></i>\r\n 执行人:{{activity.excutor}}\r\n </span>\r\n </div>\r\n </el-timeline-item>\r\n </el-timeline> \r\n </div>\r\n </el-dialog>\r\n \r\n <!-- </div> -->\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from \"./api\";\r\nimport * as Enum from \"./enum\";\r\nimport userTask from \"./operation/userTask.vue\";\r\nimport { Message as ElMessage } from \"element-ui\";\r\nimport bpmnLook from \"./bpmnLook.vue\";\r\nimport selectDept from \"./operation/selectDept.vue\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { userTask, bpmnLook, selectDept },\r\n props: {\r\n extraReqParams: {\r\n type: Object,\r\n default: function() {\r\n return {}\r\n },\r\n },\r\n other: {\r\n default: true,\r\n },\r\n personType: \"\",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n beforeFunction:{\r\n type: Function,\r\n default: null\r\n },\r\n showFlowForecast: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n flowForecastFunction:{\r\n type: Function,\r\n default: null\r\n }\r\n },\r\n data() {\r\n return {\r\n revivalVars: {},\r\n processData: {},\r\n absoluteTaskId: '',\r\n userTaskListData: {},\r\n flag: false,\r\n revival: false,\r\n flowChartVisible: false,\r\n flowForecastVisible: false,\r\n flowForecastData:{\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n },\r\n flowForecastProcessInstId: '',\r\n btnLoading: false,\r\n processList: [],\r\n processDefId: \"\",\r\n processInstId: '',\r\n processDefName: \"\",\r\n businessId: \"\",\r\n trackUrl: \"\",\r\n processDefList: [],\r\n otherProcessList: [],\r\n callback: {},\r\n cancelCallBack: {},\r\n _multiNodeParticipant: [],\r\n _businessDeptId: \"\",\r\n businessCode: \"\",\r\n _vars: {},\r\n _appId: '',\r\n deptList: [],\r\n userInfo: {},\r\n hasDeptId: false,\r\n deptId: '',\r\n subjectId: '',\r\n processXml: '',\r\n };\r\n },\r\n provide () {\r\n return {\r\n getUserInfo: this.getUserInfo,\r\n }\r\n },\r\n methods: {\r\n getUserInfo () {\r\n return {\r\n deptId: this.deptId,\r\n subjectId: this.subjectId,\r\n }\r\n },\r\n handleDeptChange(val) {\r\n console.log(val, 'val')\r\n this.deptId = val\r\n this.getUserDataByDeptId()\r\n },\r\n complete(data) {\r\n console.log(data, 'complete')\r\n },\r\n setLoading(e) {\r\n this.btnLoading = e;\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, 'isxml')\r\n let res = {}\r\n let xml = ''\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, 'res')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async viewFlowChart() {\r\n this.flowChartVisible = true;\r\n this.processXml = await this.getXml(this.processDefId)\r\n // 打开预览窗口,后续代码不使用了\r\n if (Date.now()) return;\r\n api.repository\r\n .getDiagramUrl({\r\n processDefId: this.processDefId,\r\n diagramType: 1,\r\n type: Enum.SourceType.电脑端,\r\n })\r\n .then((res) => {\r\n res.data.url = 'http://localhost:2888/saber/#/flowPreview'\r\n this.trackUrl = this.getNewUrl(res.data.url, {...res.data})\r\n if (Date.now()) {\r\n this.flowChartVisible = true;\r\n return;\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n this.flowChartVisible = true;\r\n }\r\n });\r\n },\r\n // 判断url和当前网页的url域名是否相同\r\n isSameDomain(url) {\r\n return url.indexOf(window.location.host) != -1\r\n },\r\n // 根据url和query对象,拼接一个新的链接\r\n getNewUrl(url, query) {\r\n let queryStr = ''\r\n for (let key in query) {\r\n queryStr += `${key}=${query[key]}&`\r\n }\r\n // 判断url和当前网页的url域名是否相同\r\n if(!this.isSameDomain(url)){\r\n // 如果不同,则query要加上token,从localstorage获取\r\n let token = localStorage.getItem('token');\r\n queryStr += `token=${token}&`\r\n }\r\n queryStr = queryStr.slice(0, -1)\r\n return `${url}?${queryStr}`\r\n },\r\n viewFlowForecast(){\r\n if(this.flowForecastFunction){\r\n this.flowForecastFunction()\r\n }else {\r\n this.forecast({\r\n appId: this._appId ,\r\n title: '1',//title不能为空,随便传的一个值\r\n }) \r\n } \r\n },\r\n forecast(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .getProcessForecast({\r\n processDefId: this.processDefId,\r\n ...data,\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n if(e.data && e.data.processBudgetModelList && e.data.processBudgetModelList.length){\r\n this.flowForecastProcessInstId = e.data.processBudgetModelList[0].processInstId\r\n }else{\r\n e.data.processBudgetModelList = []\r\n this.flowForecastProcessInstId = ''\r\n }\r\n this.flowForecastData = e.data \r\n this.flowForecastVisible = true;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程预测失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n flowForecastClose(){\r\n if(this.flowForecastProcessInstId){\r\n api.pis\r\n .deleteProcessById(this.flowForecastProcessInstId)\r\n .then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.flowForecastVisible = false;\r\n this.flowForecastData = {\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n }\r\n this.flowForecastProcessInstId = ''\r\n }\r\n });\r\n }else{\r\n this.flowForecastVisible = false; \r\n this.flowForecastData = {\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n }\r\n }\r\n },\r\n processDefChange(processId) {\r\n this.processDefId = processId;\r\n api.repository.getFirstProcessNode(this.processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // // 获取部门id\r\n // const deptId = info.userInfo.deptId\r\n // this.deptId = deptId\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n // api.repository.getAfferentParticipantNodeList(processId).then((res) => {\r\n // if (res.code == Enum.apiCode.success) {\r\n // res.data.map((item) => {\r\n // item.type = \"UserTaskModel\";\r\n // });\r\n // this.processList = res.data;\r\n // let tmp = JSON.parse(JSON.stringify(res.data));\r\n // tmp.shift();\r\n // this.otherProcessList = tmp;\r\n // }\r\n // });\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = \"userTask\" + key;\r\n return this.userTaskListData[key];\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == \"任意指定\" ||\r\n humanPerformer == \"固定部门\" ||\r\n humanPerformer == \"固定单位\" ||\r\n humanPerformer == \"固定群组\"\r\n );\r\n },\r\n createAndStart(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .createAndStart({\r\n processDefId: this.processDefId,\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : '',\r\n // vars: this._businessDeptId\r\n // ? { _businessDeptId: this._businessDeptId, ...this._vars }\r\n // : this._vars,\r\n vars: {\r\n showType: \"all\",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程启动失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n revivalFlow(data = {}, history = false, msg = \"流程复活\") {\r\n console.log(msg, '流程复活')\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n const vars = {\r\n ...this.revivalVars,\r\n showType: \"all\",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n Object.keys(vars).forEach((key) => {\r\n // 字符串转小写\r\n const fk = key.toLowerCase();\r\n if (fk.includes('_')) {\r\n delete vars[key];\r\n }\r\n if (fk == 'appShow') {\r\n delete vars[key];\r\n }\r\n })\r\n api.pis\r\n .reactivate(\r\n {\r\n reactivate: true,\r\n processDefId: this.processDefId,\r\n processInstId: this.processInstId,\r\n isClearHistory: this.isClearHistory,\r\n // reactivateReason: \"重新提交\",\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : '',\r\n vars,\r\n },\r\n \"\",\r\n this.businessId,\r\n msg,\r\n \"\",\r\n history,\r\n this._multiNodeParticipant,\r\n this.extraReqParams,\r\n )\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程复活失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n Show(processDefId, appid = \"\", revival = false) {\r\n this.processList = [];\r\n this.revival = revival;\r\n this.processDefId = processDefId;\r\n\r\n if (appid) {\r\n api.repository.getProcessDefList(appid, \"\").then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n e.data.map((item) => {\r\n if (item.id == processDefId) {\r\n this.processDefName = item.name;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n\r\n this.callback = resolve;\r\n // api.repository\r\n // .getAfferentParticipantNodeList(processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n });\r\n },\r\n selectShow(\r\n info = {\r\n appId: \"\",\r\n businessCode: \"\",\r\n businessType: \"\",\r\n keyWord: \"\",\r\n businessDeptId: \"\",\r\n userInfo: {},\r\n }\r\n ) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.revival = false;\r\n this._appId = info.appId\r\n this._businessDeptId = info.businessDeptId;\r\n this.businessCode = info.businessCode || info.businessType;\r\n this.userInfo = info.userInfo;\r\n // 获取部门id\r\n this.deptId = info.userInfo.deptId\r\n // 获取主体id\r\n this.subjectId = info.userInfo.subjectId\r\n this.hasDeptId = !!info.userInfo.deptId\r\n console.log('======_businessDeptId',this._businessDeptId);\r\n return new Promise((resolve, reject) => {\r\n console.log(reject, 'reject')\r\n this.cancelCallBack = reject;\r\n api.repository\r\n .getProcessDefListNew(info)\r\n .then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n if (e.data.length == 1) {\r\n this.processDefList = e.data;\r\n this.processDefId = e.data[0].id;\r\n this.processDefName = e.data[0].name;\r\n api.repository\r\n .getFirstProcessNode(this.processDefId)\r\n .then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n console.log(res, 'res')\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n \r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n } else {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.processDefList = e.data;\r\n\r\n if (info.keyWord) {\r\n this.processDefList.map((item) => {\r\n if (\r\n item.name.indexOf(info.keyWord) != -1 &&\r\n !this.processDefId\r\n ) {\r\n this.processDefId = item.id;\r\n this.processDefName = item.name;\r\n this.processDefChange(item.id);\r\n }\r\n });\r\n }\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n }\r\n });\r\n });\r\n },\r\n // 处理routeTxt\r\n handleRouteTxt(item) {\r\n let str\r\n // 交集\r\n if (item.assigneeRetain == true) {\r\n return \r\n }\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n // 获取节点人员的部门\r\n async getNodeUserDept() {\r\n let res = {}\r\n try {\r\n res = await api.user.getSelectTree()\r\n console.log(res, 'res')\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n console.log(res.data, 'data')\r\n this.deptList = res.data || []\r\n },\r\n\r\n listShow(list) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.revival = false;\r\n return new Promise((resolve, reject) => {\r\n if (list.length == 1) {\r\n this.processDefId = list[0].id;\r\n this.processDefName = list[0].name;\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(this.processDefId).then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n api.repository\r\n .getAfferentParticipantNodeList(this.processDefId)\r\n .then((e) => {\r\n this.otherProcessList = e.data.filter((el) => {\r\n return el[\"id\"] != this.processList[0][\"id\"];\r\n });\r\n this.otherProcessList.map((el) => {\r\n el[\"REQUIRED\"] = false;\r\n });\r\n });\r\n }\r\n });\r\n } else {\r\n this.processDefList = list;\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n });\r\n },\r\n // 流程\r\n async getProcessInfo({ taskId, processInstId }) {\r\n\r\n let res = {};\r\n try {\r\n res = await api.tis.getTaskModelDetail(taskId ? {\r\n processInstId,\r\n taskId,\r\n } : {\r\n processInstId,\r\n })\r\n } catch (e) {\r\n res = {}\r\n }\r\n \r\n if (res.code == 200) {\r\n \r\n }\r\n return res\r\n },\r\n async revivalShow({ processInstId, businessId, taskId, deptId }) {\r\n this.processInstId = processInstId\r\n this.hasDeptId = !!deptId\r\n let res = await this.getProcessInfo({ taskId, processInstId })\r\n // let res = await api.pis.getProcessInstanceByBusinessKey(businessId);\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n this._businessDeptId = deptId\r\n this.hasDeptId = !!deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, 'id')\r\n\r\n this.revival = true;\r\n this.businessId = businessId;\r\n this.subjectId = res.data.process.variables.subjectId\r\n this.businessCode = res.data.process.variables.businessType\r\n this.revivalVars = res.data.process.variables;\r\n\r\n this.processDefId = res.data.process.processDefinitionId;\r\n this.processDefName = res.data.process.processDefinitionName;\r\n this.processDefList = [];\r\n \r\n return this.Show(res.data.process.processDefinitionId, \"\", true);\r\n }\r\n \r\n },\r\n onClickOperation() {\r\n if(!this.processDefId || this.processDefId==''){\r\n ElMessage.warning(\"请选择流程\");\r\n return false;\r\n }\r\n let multiNodeParticipant = {},\r\n vars = {};\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o][0];\r\n let res = refCom\r\n ? refCom.getValue()\r\n : { multiNodeParticipant: [], vars: {} };\r\n if (!res) {\r\n return false;\r\n }\r\n console.log(res, 'res')\r\n multiNodeParticipant = {\r\n ...multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n vars = { ...vars, ...res.vars };\r\n console.log(vars, 'vars')\r\n }\r\n this._multiNodeParticipant = multiNodeParticipant;\r\n this._vars = vars;\r\n if(this.beforeFunction){\r\n this.beforeFunction()\r\n }else if (this.callback) {\r\n this.callback(this.revival ? this.revivalFlow : this.createAndStart);\r\n }\r\n // this.flag = false;\r\n },\r\n onClickCancel() {\r\n this.flag = false;\r\n this.btnLoading = false;\r\n if (this.cancelCallBack) this.cancelCallBack();\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.flow-dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.flow-dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n overflow-x: hidden;\r\n}\r\n\r\n.flow-dialog {\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\" scoped>\r\n.dept-tree {\r\n width: 65%;\r\n}\r\n\r\n.process-def-name {\r\n font-weight: bold;\r\n margin-right: 20px;\r\n font-size: 16px;\r\n}\r\n.view-node-info {\r\n display: inline-block;\r\n cursor: pointer;\r\n color: #1389ff;\r\n font-size: 14px;\r\n margin: 0;\r\n}\r\n\r\n.create-form {\r\n .el-form-item__label {\r\n padding-right: 18px;\r\n }\r\n .el-form-item {\r\n margin-bottom: 10px;\r\n }\r\n}\r\n.node-list {\r\n max-height: 300px;\r\n overflow-y: scroll;\r\n}\r\n.track-view {\r\n .el-dialog__body {\r\n display: flex;\r\n justify-content: center;\r\n height: 600px;\r\n position: relative;\r\n }\r\n}\r\niframe {\r\n min-height: 500px;\r\n}\r\n</style>\r\n",".flow-dialog .el-dialog__header {\n padding: 18px 24px;\n font-size: 18px;\n font-weight: 400;\n display: flex;\n align-items: center;\n}\n\n.flow-dialog :deep(.el-dialog__body) {\n border-top: 1px solid #dadbde;\n border-bottom: 1px solid #dadbde;\n overflow: visible;\n overflow-x: hidden;\n}\n\n.flow-dialog .el-dialog__footer {\n padding: 12px !important;\n text-align: center;\n}\n.flow-dialog .el-dialog__headerbtn {\n top: 10px;\n right: 16px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */"]}, media: undefined })
11951
+ ,inject("data-v-1b8bde7a_1", { source: ".dept-tree[data-v-1b8bde7a] {\n width: 65%;\n}\n.process-def-name[data-v-1b8bde7a] {\n font-weight: bold;\n margin-right: 20px;\n font-size: 16px;\n}\n.view-node-info[data-v-1b8bde7a] {\n display: inline-block;\n cursor: pointer;\n color: #1389ff;\n font-size: 14px;\n margin: 0;\n}\n.create-form .el-form-item__label[data-v-1b8bde7a] {\n padding-right: 18px;\n}\n.create-form .el-form-item[data-v-1b8bde7a] {\n margin-bottom: 10px;\n}\n.node-list[data-v-1b8bde7a] {\n max-height: 300px;\n overflow-y: scroll;\n}\n.track-view .el-dialog__body[data-v-1b8bde7a] {\n display: flex;\n justify-content: center;\n height: 600px;\n position: relative;\n}\niframe[data-v-1b8bde7a] {\n min-height: 500px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */", map: {"version":3,"sources":["C:\\cod\\items\\ui-process-pc\\vue2\\src\\components\\zjp_process\\beforeCreate.vue","beforeCreate.vue"],"names":[],"mappings":"AAi6BA;EACA,UAAA;ACh6BA;ADm6BA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;ACh6BA;ADk6BA;EACA,qBAAA;EACA,eAAA;EACA,cAAA;EACA,eAAA;EACA,SAAA;AC/5BA;ADm6BA;EACA,mBAAA;ACh6BA;ADk6BA;EACA,mBAAA;ACh6BA;ADm6BA;EACA,iBAAA;EACA,kBAAA;ACh6BA;ADm6BA;EACA,aAAA;EACA,uBAAA;EACA,aAAA;EACA,kBAAA;ACh6BA;ADm6BA;EACA,iBAAA;ACh6BA;;AAEA,2CAA2C","file":"beforeCreate.vue","sourcesContent":["<template>\r\n <div>\r\n <el-dialog\r\n :visible.sync=\"flag\"\r\n width=\"45%\"\r\n class=\"flow-dialog\"\r\n :close-on-click-modal=\"false\"\r\n :title=\"revival ? '流程复活' : '创建并启动流程'\"\r\n append-to-body\r\n @closed=\"onClickCancel\"\r\n >\r\n <el-form\r\n class=\"create-form\"\r\n @submit.native.prevent\r\n label-width=\"200px\"\r\n status-icon\r\n >\r\n <el-form-item label=\"当前流程\" size=\"normal\" :rules=\"[{ required: true, message: '请选择流程' }]\">\r\n <el-select\r\n v-model=\"processDefId\"\r\n v-if=\"processDefList.length > 1\"\r\n style=\"width: 65%; margin-right: 10px\"\r\n filterable\r\n clearable\r\n @change=\"processDefChange\"\r\n placeholder=\"请选择\"\r\n >\r\n <el-option\r\n v-for=\"(item, index) in processDefList\"\r\n :key=\"item.id\"\r\n :label=\"item.name\"\r\n :value=\"item.id\"\r\n :disabled=\"item.disabled\"\r\n ></el-option>\r\n </el-select>\r\n <b class=\"process-def-name\" v-else>\r\n {{ processDefName }}\r\n </b>\r\n <div\r\n @click=\"viewFlowChart\"\r\n v-if=\"processDefId\"\r\n class=\"view-node-info\"\r\n style=\"margin-right: 10px\"\r\n >\r\n 预览\r\n </div>\r\n <div\r\n @click=\"viewFlowForecast\"\r\n v-if=\"processDefId && showFlowForecast\"\r\n class=\"view-node-info\">\r\n 流程预测\r\n </div>\r\n </el-form-item>\r\n\r\n <!-- 如果没有传入部门,则需要选择部门 -->\r\n <el-form-item v-if=\"!hasDeptId\" label=\"选择部门\" :rules=\"[{ required: true, message: '请选择部门' }]\">\r\n <selectDept\r\n class=\"dept-tree\"\r\n :deptId=\"deptId\"\r\n :ops=\"deptList\"\r\n @input=\"handleDeptChange\"\r\n />\r\n </el-form-item>\r\n\r\n <div class=\"node-list\" v-if=\"deptId\">\r\n <el-form-item\r\n v-if=\"processList && processList.length > 0\"\r\n label=\"下一步处理节点\"\r\n size=\"normal\"\r\n >\r\n </el-form-item>\r\n <template v-if=\"processList.length > 0\">\r\n <template v-for=\"(item, index) in processList\" >\r\n <userTask\r\n :index=\"index\"\r\n :personType=\"personType\"\r\n :personEntity=\"{ ...personEntity, _businessDeptId }\"\r\n :processNode=\"{\r\n ...item,\r\n REQUIRED: index == 0 ? true : false,\r\n }\"\r\n label=\"处理人\"\r\n :rules=\"[{ required: index == 0 ? true : false, message: '请选择审批人' }]\"\r\n :ref=\"setItemRef(item.id)\"\r\n @complete=\"complete\"\r\n ></userTask>\r\n <div class=\"user-task-split\" v-if=\"index !== processList.length - 1\"></div>\r\n </template>\r\n </template>\r\n\r\n <!-- <template v-if=\"otherProcessList.length > 0 && other\">\r\n <el-form-item\r\n v-if=\"processList && processList.length > 0\"\r\n label=\"其他处理节点\"\r\n size=\"normal\"\r\n >\r\n </el-form-item>\r\n\r\n <template v-if=\"processList.length > 0\">\r\n <userTask\r\n v-for=\"item in otherProcessList\"\r\n :personType=\"personType\"\r\n :personEntity=\"{ ...personEntity, _businessDeptId }\"\r\n :key=\"item.id\"\r\n :processNode=\"item\"\r\n :noprop=\"true\"\r\n :ref=\"setItemRef(item.id)\"\r\n ></userTask>\r\n </template>\r\n </template> -->\r\n </div>\r\n </el-form>\r\n <template #footer>\r\n <el-button\r\n :loading=\"btnLoading\"\r\n type=\"primary\"\r\n @click=\"onClickOperation\"\r\n >确 定</el-button\r\n >\r\n <el-button :loading=\"btnLoading\" @click=\"onClickCancel\"\r\n >取 消</el-button\r\n >\r\n </template>\r\n </el-dialog>\r\n\r\n <!-- <div class=\"dialog\"> -->\r\n <el-dialog\r\n :visible.sync=\"flowChartVisible\"\r\n width=\"60%\"\r\n append-to-body\r\n title=\"流程图信息\"\r\n class=\"track-view\"\r\n v-dialogDrag\r\n >\r\n <bpmnLook v-if=\"flowChartVisible && processXml\" ref=\"PreviewRef\" :diagram=\"processXml\"></bpmnLook>\r\n <!-- <iframe\r\n :src=\"trackUrl\"\r\n frameborder=\"0\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n /> -->\r\n <!-- <el-image :src=\"trackUrl\"></el-image> -->\r\n </el-dialog>\r\n\r\n <el-dialog\r\n :visible.sync=\"flowForecastVisible\"\r\n width=\"45%\"\r\n append-to-body\r\n title=\"流程预测\"\r\n v-dialogDrag\r\n @close=\"flowForecastClose\"\r\n >\r\n <div style=\"margin-left: 20px;\">\r\n <div v-html=\"flowForecastData.completeTime\" style=\"margin-left: 40px;margin-bottom: 20px;\"></div>\r\n <el-timeline>\r\n <el-timeline-item\r\n v-for=\"(activity, index) in flowForecastData.processBudgetModelList\"\r\n :key=\"index\"\r\n icon=\"el-icon-check\"\r\n :color=\"index==0 ? '#009800': activity.color\"\r\n :timestamp=\"activity.title\" placement=\"top\">\r\n <div>\r\n <span style=\"color:#009800;\">\r\n <i class=\"el-icon-s-custom\" style=\"margin-right: 5px;\"></i>\r\n 执行人:{{activity.excutor}}\r\n </span>\r\n </div>\r\n </el-timeline-item>\r\n </el-timeline> \r\n </div>\r\n </el-dialog>\r\n \r\n <!-- </div> -->\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport api from \"./api\";\r\nimport * as Enum from \"./enum\";\r\nimport userTask from \"./operation/userTask.vue\";\r\nimport { Message as ElMessage } from \"element-ui\";\r\nimport bpmnLook from \"./bpmnLook.vue\";\r\nimport selectDept from \"./operation/selectDept.vue\";\r\nimport { getNodeUserParams } from './utils'\r\n\r\nexport default {\r\n components: { userTask, bpmnLook, selectDept },\r\n props: {\r\n extraReqParams: {\r\n type: Object,\r\n default: function() {\r\n return {}\r\n },\r\n },\r\n other: {\r\n default: true,\r\n },\r\n personType: \"\",\r\n personEntity: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n beforeFunction:{\r\n type: Function,\r\n default: null\r\n },\r\n showFlowForecast: {\r\n default: false,\r\n type: Boolean,\r\n },\r\n flowForecastFunction:{\r\n type: Function,\r\n default: null\r\n }\r\n },\r\n data() {\r\n return {\r\n revivalVars: {},\r\n processData: {},\r\n absoluteTaskId: '',\r\n userTaskListData: {},\r\n flag: false,\r\n revival: false,\r\n flowChartVisible: false,\r\n flowForecastVisible: false,\r\n flowForecastData:{\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n },\r\n flowForecastProcessInstId: '',\r\n btnLoading: false,\r\n processList: [],\r\n processDefId: \"\",\r\n processInstId: '',\r\n processDefName: \"\",\r\n businessId: \"\",\r\n trackUrl: \"\",\r\n processDefList: [],\r\n otherProcessList: [],\r\n callback: {},\r\n cancelCallBack: {},\r\n _multiNodeParticipant: [],\r\n _businessDeptId: \"\",\r\n businessCode: \"\",\r\n _vars: {},\r\n _appId: '',\r\n deptList: [],\r\n userInfo: {},\r\n hasDeptId: false,\r\n deptId: '',\r\n subjectId: '',\r\n processXml: '',\r\n };\r\n },\r\n provide () {\r\n return {\r\n getUserInfo: this.getUserInfo,\r\n }\r\n },\r\n methods: {\r\n getUserInfo () {\r\n return {\r\n deptId: this.deptId,\r\n subjectId: this.subjectId,\r\n }\r\n },\r\n handleDeptChange(val) {\r\n console.log(val, 'val')\r\n this.deptId = val\r\n this.getUserDataByDeptId()\r\n },\r\n complete(data) {\r\n console.log(data, 'complete')\r\n },\r\n setLoading(e) {\r\n this.btnLoading = e;\r\n },\r\n async getXml(id) {\r\n console.log(this.isXml, 'isxml')\r\n let res = {}\r\n let xml = ''\r\n try {\r\n res = await api.repository.getXmlByProcessDefId({ processDefId: id })\r\n console.log(res, 'res')\r\n if (res.code == 200) {\r\n xml = res.data;\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n return xml;\r\n },\r\n async viewFlowChart() {\r\n this.flowChartVisible = true;\r\n this.processXml = await this.getXml(this.processDefId)\r\n // 打开预览窗口,后续代码不使用了\r\n if (Date.now()) return;\r\n api.repository\r\n .getDiagramUrl({\r\n processDefId: this.processDefId,\r\n diagramType: 1,\r\n type: Enum.SourceType.电脑端,\r\n })\r\n .then((res) => {\r\n res.data.url = 'http://localhost:2888/saber/#/flowPreview'\r\n this.trackUrl = this.getNewUrl(res.data.url, {...res.data})\r\n if (Date.now()) {\r\n this.flowChartVisible = true;\r\n return;\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n if (window.location.protocol == \"https:\") {\r\n if (res.data.indexOf(\"http://121.40.143.183:80/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183:80/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://121.40.143.183/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://121.40.143.183/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://acme-aws.ddzg.cn/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://acme-aws.ddzg.cn/\",\r\n \"https://acme-aws.ddzg.cn/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.231:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.231:8088/\",\r\n \"https://acme-test.ddzg.cn:2119/\"\r\n )\r\n } else if (res.data.indexOf(\"http://59.53.91.230:8088/\") >= 0) {\r\n this.trackUrl = res.data.replace(\r\n \"http://59.53.91.230:8088/\",\r\n \"https://kq.ddzg.cn:8093/\"\r\n )\r\n } else {\r\n this.trackUrl = res.data\r\n }\r\n } else {\r\n this.trackUrl = res.data;\r\n }\r\n this.flowChartVisible = true;\r\n }\r\n });\r\n },\r\n // 判断url和当前网页的url域名是否相同\r\n isSameDomain(url) {\r\n return url.indexOf(window.location.host) != -1\r\n },\r\n // 根据url和query对象,拼接一个新的链接\r\n getNewUrl(url, query) {\r\n let queryStr = ''\r\n for (let key in query) {\r\n queryStr += `${key}=${query[key]}&`\r\n }\r\n // 判断url和当前网页的url域名是否相同\r\n if(!this.isSameDomain(url)){\r\n // 如果不同,则query要加上token,从localstorage获取\r\n let token = localStorage.getItem('token');\r\n queryStr += `token=${token}&`\r\n }\r\n queryStr = queryStr.slice(0, -1)\r\n return `${url}?${queryStr}`\r\n },\r\n viewFlowForecast(){\r\n if(this.flowForecastFunction){\r\n this.flowForecastFunction()\r\n }else {\r\n this.forecast({\r\n appId: this._appId ,\r\n title: '1',//title不能为空,随便传的一个值\r\n }) \r\n } \r\n },\r\n forecast(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .getProcessForecast({\r\n processDefId: this.processDefId,\r\n ...data,\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n if(e.data && e.data.processBudgetModelList && e.data.processBudgetModelList.length){\r\n this.flowForecastProcessInstId = e.data.processBudgetModelList[0].processInstId\r\n }else{\r\n e.data.processBudgetModelList = []\r\n this.flowForecastProcessInstId = ''\r\n }\r\n this.flowForecastData = e.data \r\n this.flowForecastVisible = true;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程预测失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n flowForecastClose(){\r\n if(this.flowForecastProcessInstId){\r\n api.pis\r\n .deleteProcessById(this.flowForecastProcessInstId)\r\n .then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.flowForecastVisible = false;\r\n this.flowForecastData = {\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n }\r\n this.flowForecastProcessInstId = ''\r\n }\r\n });\r\n }else{\r\n this.flowForecastVisible = false; \r\n this.flowForecastData = {\r\n completeTime:'',\r\n processBudgetModelList:[]\r\n }\r\n }\r\n },\r\n processDefChange(processId) {\r\n this.processDefId = processId;\r\n api.repository.getFirstProcessNode(this.processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // // 获取部门id\r\n // const deptId = info.userInfo.deptId\r\n // this.deptId = deptId\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n // api.repository.getAfferentParticipantNodeList(processId).then((res) => {\r\n // if (res.code == Enum.apiCode.success) {\r\n // res.data.map((item) => {\r\n // item.type = \"UserTaskModel\";\r\n // });\r\n // this.processList = res.data;\r\n // let tmp = JSON.parse(JSON.stringify(res.data));\r\n // tmp.shift();\r\n // this.otherProcessList = tmp;\r\n // }\r\n // });\r\n },\r\n setItemRef(key) {\r\n this.userTaskListData[key] = \"userTask\" + key;\r\n return this.userTaskListData[key];\r\n },\r\n isOption(humanPerformer) {\r\n return (\r\n humanPerformer == \"任意指定\" ||\r\n humanPerformer == \"固定部门\" ||\r\n humanPerformer == \"固定单位\" ||\r\n humanPerformer == \"固定群组\"\r\n );\r\n },\r\n createAndStart(data) {\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n api.pis\r\n .createAndStart({\r\n processDefId: this.processDefId,\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : '',\r\n // vars: this._businessDeptId\r\n // ? { _businessDeptId: this._businessDeptId, ...this._vars }\r\n // : this._vars,\r\n vars: {\r\n showType: \"all\",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n })\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程启动失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n revivalFlow(data = {}, history = false, msg = \"流程复活\") {\r\n console.log(msg, '流程复活')\r\n this.btnLoading = true;\r\n return new Promise((resolve, reject) => {\r\n const vars = {\r\n ...this.revivalVars,\r\n showType: \"all\",\r\n subjectId: this.subjectId,\r\n deptId: this.deptId,\r\n businessType: this.businessCode,\r\n ...data,\r\n ...this._vars,\r\n }\r\n Object.keys(vars).forEach((key) => {\r\n // 字符串转小写\r\n const fk = key.toLowerCase();\r\n if (fk.includes('_')) {\r\n delete vars[key];\r\n }\r\n if (fk == 'appShow') {\r\n delete vars[key];\r\n }\r\n })\r\n api.pis\r\n .reactivate(\r\n {\r\n reactivate: true,\r\n processDefId: this.processDefId,\r\n processInstId: this.processInstId,\r\n isClearHistory: this.isClearHistory,\r\n // reactivateReason: \"重新提交\",\r\n multiNodeParticipant: this._multiNodeParticipant,\r\n firstNodeId: this.processList && this.processList.length > 0 ? this.processList[0].id : '',\r\n vars,\r\n },\r\n \"\",\r\n this.businessId,\r\n msg,\r\n \"\",\r\n history,\r\n this._multiNodeParticipant,\r\n this.extraReqParams,\r\n )\r\n .then((e) => {\r\n this.btnLoading = false;\r\n if (e.code == Enum.apiCode.success) {\r\n this.flag = false;\r\n resolve(e);\r\n } else {\r\n ElMessage.error(e.msg);\r\n }\r\n })\r\n .catch((e) => {\r\n this.btnLoading = false;\r\n ElMessage.error(\"流程复活失败,请重试\");\r\n reject(e);\r\n });\r\n });\r\n },\r\n Show(processDefId, appid = \"\", revival = false) {\r\n this.processList = [];\r\n this.revival = revival;\r\n this.processDefId = processDefId;\r\n\r\n if (appid) {\r\n api.repository.getProcessDefList(appid, \"\").then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n e.data.map((item) => {\r\n if (item.id == processDefId) {\r\n this.processDefName = item.name;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(processDefId).then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n\r\n this.callback = resolve;\r\n // api.repository\r\n // .getAfferentParticipantNodeList(processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n });\r\n },\r\n selectShow(\r\n info = {\r\n appId: \"\",\r\n businessCode: \"\",\r\n businessType: \"\",\r\n keyWord: \"\",\r\n businessDeptId: \"\",\r\n userInfo: {},\r\n }\r\n ) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.revival = false;\r\n this._appId = info.appId\r\n this._businessDeptId = info.businessDeptId;\r\n this.businessCode = info.businessCode || info.businessType;\r\n this.userInfo = info.userInfo;\r\n // 获取部门id\r\n this.deptId = info.userInfo.deptId\r\n // 获取主体id\r\n this.subjectId = info.userInfo.subjectId\r\n this.hasDeptId = !!info.userInfo.deptId\r\n console.log('======_businessDeptId',this._businessDeptId);\r\n return new Promise((resolve, reject) => {\r\n console.log(reject, 'reject')\r\n this.cancelCallBack = reject;\r\n api.repository\r\n .getProcessDefListNew(info)\r\n .then((e) => {\r\n if (e.code == Enum.apiCode.success) {\r\n if (e.data.length == 1) {\r\n this.processDefList = e.data;\r\n this.processDefId = e.data[0].id;\r\n this.processDefName = e.data[0].name;\r\n api.repository\r\n .getFirstProcessNode(this.processDefId)\r\n .then(async (res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n console.log(res, 'res')\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n // 获取部门\r\n await this.getNodeUserDept()\r\n // 没有传入部门,则需要在选择部门后进行后续操作\r\n if (!this.deptId) return;\r\n this.getUserDataByDeptId()\r\n // 获取人员,没有人则是之前的选人逻辑\r\n\r\n \r\n // api.repository\r\n // .getAfferentParticipantNodeList(this.processDefId)\r\n // .then((e) => {\r\n // this.otherProcessList = e.data.filter((el) => {\r\n // return el[\"id\"] != this.processList[0][\"id\"];\r\n // });\r\n // this.otherProcessList.map((el) => {\r\n // el[\"REQUIRED\"] = false;\r\n // });\r\n // });\r\n }\r\n });\r\n } else {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.processDefList = e.data;\r\n\r\n if (info.keyWord) {\r\n this.processDefList.map((item) => {\r\n if (\r\n item.name.indexOf(info.keyWord) != -1 &&\r\n !this.processDefId\r\n ) {\r\n this.processDefId = item.id;\r\n this.processDefName = item.name;\r\n this.processDefChange(item.id);\r\n }\r\n });\r\n }\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n }\r\n });\r\n });\r\n },\r\n // 处理routeTxt\r\n handleRouteTxt(item) {\r\n let str\r\n // 交集\r\n if (item.assigneeRetain == true) {\r\n return \r\n }\r\n },\r\n // 通过部门id获取流程节点的人员\r\n getUserDataByDeptId() {\r\n this.processList.map(async (item, index) => {\r\n console.log(item, 'item')\r\n const nodeUserParams = getNodeUserParams(item)\r\n let res\r\n try {\r\n res = await this.getNodeUser({\r\n deptId: this.deptId,\r\n intersection: nodeUserParams.intersection ? 1 : 0,\r\n userIds: nodeUserParams.userIds,\r\n postIds: nodeUserParams.postIds,\r\n deptIds: nodeUserParams.deptIds,\r\n })\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n if (res.code == Enum.apiCode.success) {\r\n const l = this.processList[index]\r\n l.userList = res.data\r\n this.$set(this.processList, index, l)\r\n\r\n }\r\n // console.log(user, 'user', index)\r\n })\r\n },\r\n // 获取节点的人员\r\n async getNodeUser({ deptId, intersection, userIds, postIds, deptIds }) {\r\n return await api.user.getTaskAuditor({\r\n deptId,\r\n intersection,\r\n userIds,\r\n postIds,\r\n deptIds\r\n })\r\n },\r\n // 获取节点人员的部门\r\n async getNodeUserDept() {\r\n let res = {}\r\n try {\r\n res = await api.user.getSelectTree()\r\n console.log(res, 'res')\r\n } catch (error) {\r\n console.log(error, 'error')\r\n }\r\n console.log(res.data, 'data')\r\n this.deptList = res.data || []\r\n },\r\n\r\n listShow(list) {\r\n this.processList = [];\r\n this.otherProcessList = [];\r\n this.processDefId = \"\";\r\n this.processDefName = \"\";\r\n this.revival = false;\r\n return new Promise((resolve, reject) => {\r\n if (list.length == 1) {\r\n this.processDefId = list[0].id;\r\n this.processDefName = list[0].name;\r\n this.cancelCallBack = reject;\r\n api.repository.getFirstProcessNode(this.processDefId).then((res) => {\r\n if (res.code == Enum.apiCode.success) {\r\n this.processList = res.data;\r\n this.flag = true;\r\n this.callback = resolve;\r\n api.repository\r\n .getAfferentParticipantNodeList(this.processDefId)\r\n .then((e) => {\r\n this.otherProcessList = e.data.filter((el) => {\r\n return el[\"id\"] != this.processList[0][\"id\"];\r\n });\r\n this.otherProcessList.map((el) => {\r\n el[\"REQUIRED\"] = false;\r\n });\r\n });\r\n }\r\n });\r\n } else {\r\n this.processDefList = list;\r\n this.flag = true;\r\n this.callback = resolve;\r\n }\r\n });\r\n },\r\n // 流程\r\n async getProcessInfo({ taskId, processInstId }) {\r\n\r\n let res = {};\r\n try {\r\n res = await api.tis.getTaskModelDetail(taskId ? {\r\n processInstId,\r\n taskId,\r\n } : {\r\n processInstId,\r\n })\r\n } catch (e) {\r\n res = {}\r\n }\r\n \r\n if (res.code == 200) {\r\n \r\n }\r\n return res\r\n },\r\n async revivalShow({ processInstId, businessId, taskId, deptId }) {\r\n this.processInstId = processInstId\r\n this.hasDeptId = !!deptId\r\n let res = await this.getProcessInfo({ taskId, processInstId })\r\n // let res = await api.pis.getProcessInstanceByBusinessKey(businessId);\r\n if (res.code == 200) {\r\n this.processData = {\r\n ...this.initProcessData,\r\n ...(res.data || {}),\r\n };\r\n const deptId = ((this.processData.process || {}).variables || {}).deptId\r\n this.deptId = deptId\r\n this._businessDeptId = deptId\r\n this.hasDeptId = !!deptId\r\n const taskId = (this.processData.process || {}).taskId\r\n this.absoluteTaskId = taskId\r\n console.log(deptId, 'id')\r\n\r\n this.revival = true;\r\n this.businessId = businessId;\r\n this.subjectId = res.data.process.variables.subjectId\r\n this.businessCode = res.data.process.variables.businessType\r\n this.revivalVars = res.data.process.variables;\r\n\r\n this.processDefId = res.data.process.processDefinitionId;\r\n this.processDefName = res.data.process.processDefinitionName;\r\n this.processDefList = [];\r\n \r\n return this.Show(res.data.process.processDefinitionId, \"\", true);\r\n }\r\n \r\n },\r\n onClickOperation() {\r\n if(!this.processDefId || this.processDefId==''){\r\n ElMessage.warning(\"请选择流程\");\r\n return false;\r\n }\r\n let multiNodeParticipant = {},\r\n vars = {};\r\n for (let key in this.userTaskListData) {\r\n let o = this.userTaskListData[key];\r\n let refCom = this.$refs[o][0];\r\n let res = refCom\r\n ? refCom.getValue()\r\n : { multiNodeParticipant: [], vars: {} };\r\n if (!res) {\r\n return false;\r\n }\r\n console.log(res, 'res')\r\n multiNodeParticipant = {\r\n ...multiNodeParticipant,\r\n ...res.multiNodeParticipant,\r\n };\r\n vars = { ...vars, ...res.vars };\r\n console.log(vars, 'vars')\r\n }\r\n this._multiNodeParticipant = multiNodeParticipant;\r\n this._vars = vars;\r\n if(this.beforeFunction){\r\n this.beforeFunction()\r\n }else if (this.callback) {\r\n this.callback(this.revival ? this.revivalFlow : this.createAndStart);\r\n }\r\n // this.flag = false;\r\n },\r\n onClickCancel() {\r\n this.flag = false;\r\n this.btnLoading = false;\r\n if (this.cancelCallBack) this.cancelCallBack();\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n.flow-dialog {\r\n .el-dialog__header {\r\n padding: 18px 24px;\r\n font-size: 18px;\r\n font-weight: 400;\r\n display: flex;\r\n align-items: center;\r\n }\r\n}\r\n\r\n.flow-dialog :deep(.el-dialog__body) {\r\n border-top: 1px solid #dadbde;\r\n border-bottom: 1px solid #dadbde;\r\n overflow: visible;\r\n overflow-x: hidden;\r\n}\r\n\r\n.flow-dialog {\r\n .el-dialog__footer {\r\n padding: 12px !important;\r\n text-align: center;\r\n }\r\n .el-dialog__headerbtn {\r\n top: 10px;\r\n right: 16px;\r\n }\r\n}\r\n</style>\r\n\r\n<style lang=\"scss\" scoped>\r\n.dept-tree {\r\n width: 65%;\r\n}\r\n\r\n.process-def-name {\r\n font-weight: bold;\r\n margin-right: 20px;\r\n font-size: 16px;\r\n}\r\n.view-node-info {\r\n display: inline-block;\r\n cursor: pointer;\r\n color: #1389ff;\r\n font-size: 14px;\r\n margin: 0;\r\n}\r\n\r\n.create-form {\r\n .el-form-item__label {\r\n padding-right: 18px;\r\n }\r\n .el-form-item {\r\n margin-bottom: 10px;\r\n }\r\n}\r\n.node-list {\r\n max-height: 300px;\r\n overflow-y: scroll;\r\n}\r\n.track-view {\r\n .el-dialog__body {\r\n display: flex;\r\n justify-content: center;\r\n height: 600px;\r\n position: relative;\r\n }\r\n}\r\niframe {\r\n min-height: 500px;\r\n}\r\n</style>\r\n",".dept-tree {\n width: 65%;\n}\n\n.process-def-name {\n font-weight: bold;\n margin-right: 20px;\n font-size: 16px;\n}\n\n.view-node-info {\n display: inline-block;\n cursor: pointer;\n color: #1389ff;\n font-size: 14px;\n margin: 0;\n}\n\n.create-form .el-form-item__label {\n padding-right: 18px;\n}\n.create-form .el-form-item {\n margin-bottom: 10px;\n}\n\n.node-list {\n max-height: 300px;\n overflow-y: scroll;\n}\n\n.track-view .el-dialog__body {\n display: flex;\n justify-content: center;\n height: 600px;\n position: relative;\n}\n\niframe {\n min-height: 500px;\n}\n\n/*# sourceMappingURL=beforeCreate.vue.map */"]}, media: undefined });
10812
11952
 
10813
11953
  };
10814
11954
  /* scoped */
10815
- const __vue_scope_id__$2 = "data-v-2b0fb27a";
11955
+ const __vue_scope_id__$2 = "data-v-1b8bde7a";
10816
11956
  /* module identifier */
10817
11957
  const __vue_module_identifier__$2 = undefined;
10818
11958
  /* functional template */