440
440
</div >
441
441
</div >
442
442
</el-tab-pane >
443
- <!-- TODO @lesan:要不抽成 Listener 小组件?类似 Condition.vue -->
444
443
<el-tab-pane label =" 监听器" name =" listener" >
445
- <el-form ref =" listenerFormRef" :model =" configForm" label-position =" top" >
446
- <div v-for =" (listener, listenerIdx) in taskListener" :key =" listenerIdx" >
447
- <el-divider content-position =" left" >
448
- <el-text tag =" b" size =" large" >{{ listener.name }}</el-text >
449
- </el-divider >
450
- <el-form-item >
451
- <el-switch
452
- v-model =" configForm[`task${listener.type}ListenerEnable`]"
453
- active-text =" 开启"
454
- inactive-text =" 关闭"
455
- />
456
- </el-form-item >
457
- <div v-if =" configForm[`task${listener.type}ListenerEnable`]" >
458
- <el-form-item >
459
- <el-alert
460
- title =" 仅支持 POST 请求,以请求体方式接收参数"
461
- type =" warning"
462
- show-icon
463
- :closable =" false"
464
- />
465
- </el-form-item >
466
- <el-form-item
467
- label =" 请求地址"
468
- :prop =" `task${listener.type}ListenerPath`"
469
- :rules =" {
470
- required: true,
471
- message: '请求地址不能为空',
472
- trigger: 'blur'
473
- }"
474
- >
475
- <el-input v-model =" configForm[`task${listener.type}ListenerPath`]" />
476
- </el-form-item >
477
- <el-form-item label =" 请求头" >
478
- <div
479
- class =" flex pt-2"
480
- v-for =" (item, index) in configForm[`task${listener.type}ListenerHeader`]"
481
- :key =" index"
482
- >
483
- <div class =" mr-2" >
484
- <el-form-item
485
- :prop =" `task${listener.type}ListenerHeader.${index}.key`"
486
- :rules =" {
487
- required: true,
488
- message: '参数名不能为空',
489
- trigger: 'blur'
490
- }"
491
- >
492
- <el-input class =" w-160px" v-model =" item.key" />
493
- </el-form-item >
494
- </div >
495
- <div class =" mr-2" >
496
- <el-select class =" w-100px!" v-model =" item.type" >
497
- <el-option
498
- v-for =" types in LISTENER_MAP_TYPES"
499
- :key =" types.value"
500
- :label =" types.label"
501
- :value =" types.value"
502
- />
503
- </el-select >
504
- </div >
505
- <div class =" mr-2" >
506
- <el-form-item
507
- :prop =" `task${listener.type}ListenerHeader.${index}.value`"
508
- :rules =" {
509
- required: true,
510
- message: '参数值不能为空',
511
- trigger: 'blur'
512
- }"
513
- >
514
- <el-input
515
- v-if =" item.type === ListenerParamTypeEnum.FIXED_VALUE"
516
- class =" w-160px"
517
- v-model =" item.value"
518
- />
519
- </el-form-item >
520
- <el-form-item
521
- :prop =" `task${listener.type}ListenerHeader.${index}.value`"
522
- :rules =" {
523
- required: true,
524
- message: '参数值不能为空',
525
- trigger: 'change'
526
- }"
527
- >
528
- <el-select
529
- v-if =" item.type === ListenerParamTypeEnum.FROM_FORM"
530
- class =" w-160px!"
531
- v-model =" item.value"
532
- >
533
- <el-option
534
- v-for =" (field, fIdx) in formFieldOptions"
535
- :key =" fIdx"
536
- :label =" field.title"
537
- :value =" field.field"
538
- :disabled =" !field.required"
539
- />
540
- </el-select >
541
- </el-form-item >
542
- </div >
543
- <div class =" mr-1 flex items-center" >
544
- <Icon
545
- icon =" ep:delete"
546
- :size =" 18"
547
- @click ="
548
- deleteTaskListenerParam(
549
- configForm[`task${listener.type}ListenerHeader`],
550
- index
551
- )
552
- "
553
- />
554
- </div >
555
- </div >
556
- <el-button
557
- type =" primary"
558
- text
559
- @click =" addTaskListenerParam(configForm[`task${listener.type}ListenerHeader`])"
560
- >
561
- <Icon icon =" ep:plus" class =" mr-5px" />添加一行
562
- </el-button >
563
- </el-form-item >
564
- <el-form-item label =" 请求体" >
565
- <div
566
- class =" flex pt-2"
567
- v-for =" (item, index) in configForm[`task${listener.type}ListenerBody`]"
568
- :key =" index"
569
- >
570
- <div class =" mr-2" >
571
- <el-form-item
572
- :prop =" `task${listener.type}ListenerBody.${index}.key`"
573
- :rules =" {
574
- required: true,
575
- message: '参数名不能为空',
576
- trigger: 'blur'
577
- }"
578
- >
579
- <el-input class =" w-160px" v-model =" item.key" />
580
- </el-form-item >
581
- </div >
582
- <div class =" mr-2" >
583
- <el-select class =" w-100px!" v-model =" item.type" >
584
- <el-option
585
- v-for =" types in LISTENER_MAP_TYPES"
586
- :key =" types.value"
587
- :label =" types.label"
588
- :value =" types.value"
589
- />
590
- </el-select >
591
- </div >
592
- <div class =" mr-2" >
593
- <el-form-item
594
- :prop =" `task${listener.type}ListenerBody.${index}.value`"
595
- :rules =" {
596
- required: true,
597
- message: '参数值不能为空',
598
- trigger: 'blur'
599
- }"
600
- >
601
- <el-input
602
- v-if =" item.type === ListenerParamTypeEnum.FIXED_VALUE"
603
- class =" w-160px"
604
- v-model =" item.value"
605
- />
606
- </el-form-item >
607
- <el-form-item
608
- :prop =" `task${listener.type}ListenerBody.${index}.value`"
609
- :rules =" {
610
- required: true,
611
- message: '参数值不能为空',
612
- trigger: 'change'
613
- }"
614
- >
615
- <el-select
616
- v-if =" item.type === ListenerParamTypeEnum.FROM_FORM"
617
- class =" w-160px!"
618
- v-model =" item.value"
619
- >
620
- <el-option
621
- v-for =" (field, fIdx) in formFieldOptions"
622
- :key =" fIdx"
623
- :label =" field.title"
624
- :value =" field.field"
625
- :disabled =" !field.required"
626
- />
627
- </el-select >
628
- </el-form-item >
629
- </div >
630
- <div class =" mr-1 flex items-center" >
631
- <Icon
632
- icon =" ep:delete"
633
- :size =" 18"
634
- @click ="
635
- deleteTaskListenerParam(
636
- configForm[`task${listener.type}ListenerBody`],
637
- index
638
- )
639
- "
640
- />
641
- </div >
642
- </div >
643
- <el-button
644
- type =" primary"
645
- text
646
- @click =" addTaskListenerParam(configForm[`task${listener.type}ListenerBody`])"
647
- >
648
- <Icon icon =" ep:plus" class =" mr-5px" />添加一行
649
- </el-button >
650
- </el-form-item >
651
- </div >
652
- </div >
653
- </el-form >
444
+ <UserTaskListener ref =" userTaskListenerRef" v-model =" configForm" :form-field-options =" formFieldOptions" />
654
445
</el-tab-pane >
655
446
</el-tabs >
656
447
<template #footer >
@@ -687,9 +478,7 @@ import {
687
478
ASSIGN_EMPTY_HANDLER_TYPES ,
688
479
AssignEmptyHandlerType ,
689
480
FieldPermissionType ,
690
- ProcessVariableEnum ,
691
- LISTENER_MAP_TYPES ,
692
- ListenerParamTypeEnum
481
+ ProcessVariableEnum
693
482
} from ' ../consts'
694
483
695
484
import {
@@ -703,6 +492,7 @@ import {
703
492
import { defaultProps } from ' @/utils/tree'
704
493
import { cloneDeep } from ' lodash-es'
705
494
import { convertTimeUnit , getApproveTypeText } from ' ../utils'
495
+ import UserTaskListener from ' ./components/UserTaskListener.vue'
706
496
defineOptions ({
707
497
name: ' UserTaskNodeConfig'
708
498
})
@@ -780,21 +570,6 @@ const formRules = reactive({
780
570
assignEmptyHandlerUserIds: [{ required: true , message: ' 用户不能为空' , trigger: ' change' }],
781
571
assignStartUserHandlerType: [{ required: true }]
782
572
})
783
- // 监听器数组
784
- const taskListener = ref ([
785
- {
786
- name: ' 创建任务' ,
787
- type: ' Create'
788
- },
789
- {
790
- name: ' 指派任务执行人员' ,
791
- type: ' Assign'
792
- },
793
- {
794
- name: ' 完成任务' ,
795
- type: ' Complete'
796
- }
797
- ])
798
573
799
574
const {
800
575
configForm : tempConfigForm,
@@ -843,7 +618,7 @@ const {
843
618
cTimeoutMaxRemindCount
844
619
} = useTimeoutHandler ()
845
620
846
- const listenerFormRef = ref ()
621
+ const userTaskListenerRef = ref ()
847
622
848
623
// 保存配置
849
624
const saveConfig = async () => {
@@ -860,8 +635,8 @@ const saveConfig = async () => {
860
635
}
861
636
862
637
if (! formRef ) return false
863
- if (! listenerFormRef ) return false
864
- const valid = (await formRef .value .validate ()) && (await listenerFormRef .value .validate ())
638
+ if (! userTaskListenerRef ) return false
639
+ const valid = (await formRef .value .validate ()) && (await userTaskListenerRef .value .validate ())
865
640
if (! valid ) return false
866
641
const showText = getShowText ()
867
642
if (! showText ) return false
@@ -1104,17 +879,6 @@ function useTimeoutHandler() {
1104
879
cTimeoutMaxRemindCount
1105
880
}
1106
881
}
1107
-
1108
- const addTaskListenerParam = (arr ) => {
1109
- arr .push ({
1110
- key: ' ' ,
1111
- type: 1 ,
1112
- value: ' '
1113
- })
1114
- }
1115
- const deleteTaskListenerParam = (arr , index ) => {
1116
- arr .splice (index , 1 )
1117
- }
1118
882
</script >
1119
883
1120
884
<style lang="scss" scoped>
0 commit comments