|
436 | 436 | </div>
|
437 | 437 | </el-tab-pane>
|
438 | 438 | <el-tab-pane label="监听器" name="listener">
|
439 |
| - <div> |
| 439 | + <div v-for="(listener, listenerIdx) in taskListener" :key="listenerIdx"> |
440 | 440 | <el-form label-position="top">
|
441 |
| - <el-divider content-position="left"> |
442 |
| - <el-text tag="b" size="large">创建任务</el-text> |
443 |
| - </el-divider> |
444 |
| - <!-- TODO @lesan:createTaskListenerEnable、createTaskListenerPath 等 idea 红色的告警! --> |
445 |
| - <el-form-item prop="createTaskListenerEnable"> |
446 |
| - <el-switch |
447 |
| - v-model="configForm.createTaskListenerEnable" |
448 |
| - active-text="开启" |
449 |
| - inactive-text="关闭" |
450 |
| - /> |
451 |
| - </el-form-item> |
452 |
| - <div v-if="configForm.createTaskListenerEnable"> |
| 441 | + <div> |
| 442 | + <el-divider content-position="left"> |
| 443 | + <el-text tag="b" size="large">{{ listener.name }}</el-text> |
| 444 | + </el-divider> |
453 | 445 | <el-form-item>
|
454 |
| - <el-alert |
455 |
| - title="仅支持 POST 请求,以请求体方式接收参数" |
456 |
| - type="warning" |
457 |
| - show-icon |
458 |
| - :closable="false" |
| 446 | + <el-switch |
| 447 | + v-model="configForm[`task${listener.type}ListenerEnable`]" |
| 448 | + active-text="开启" |
| 449 | + inactive-text="关闭" |
459 | 450 | />
|
460 | 451 | </el-form-item>
|
461 |
| - <el-form-item label="请求地址" prop="createTaskListenerPath"> |
462 |
| - <el-input v-model="configForm.createTaskListenerPath" /> |
463 |
| - </el-form-item> |
464 |
| - <el-form-item label="请求头" prop="createTaskListenerHeader"> |
465 |
| - <div |
466 |
| - class="flex pt-2" |
467 |
| - v-for="(item, index) in configForm.createTaskListenerHeader" |
468 |
| - :key="index" |
469 |
| - > |
470 |
| - <!-- TODO @lesan:css 尽量用 unocss 哈 --> |
471 |
| - <div class="mr-2"> |
472 |
| - <el-input v-model="item.key" style="width: 160px" /> |
473 |
| - </div> |
474 |
| - <div class="mr-2"> |
475 |
| - <el-select v-model="item.type" style="width: 100px"> |
476 |
| - <el-option |
477 |
| - v-for="types in LISTENER_MAP_TYPES" |
478 |
| - :key="types.value" |
479 |
| - :label="types.label" |
480 |
| - :value="types.value" |
| 452 | + <div v-if="configForm[`task${listener.type}ListenerEnable`]"> |
| 453 | + <el-form-item> |
| 454 | + <el-alert |
| 455 | + title="仅支持 POST 请求,以请求体方式接收参数" |
| 456 | + type="warning" |
| 457 | + show-icon |
| 458 | + :closable="false" |
| 459 | + /> |
| 460 | + </el-form-item> |
| 461 | + <el-form-item label="请求地址"> |
| 462 | + <el-input v-model="configForm[`task${listener.type}ListenerPath`]" /> |
| 463 | + </el-form-item> |
| 464 | + <el-form-item label="请求头"> |
| 465 | + <div |
| 466 | + class="flex pt-2" |
| 467 | + v-for="(item, index) in configForm[`task${listener.type}ListenerHeader`]" |
| 468 | + :key="index" |
| 469 | + > |
| 470 | + <div class="mr-2"> |
| 471 | + <el-input class="w-160px" v-model="item.key" /> |
| 472 | + </div> |
| 473 | + <div class="mr-2"> |
| 474 | + <el-select class="w-100px!" v-model="item.type"> |
| 475 | + <el-option |
| 476 | + v-for="types in LISTENER_MAP_TYPES" |
| 477 | + :key="types.value" |
| 478 | + :label="types.label" |
| 479 | + :value="types.value" |
| 480 | + /> |
| 481 | + </el-select> |
| 482 | + </div> |
| 483 | + <div class="mr-2"> |
| 484 | + <el-input class="w-160px" v-model="item.value" /> |
| 485 | + </div> |
| 486 | + <div class="mr-1 flex items-center"> |
| 487 | + <Icon |
| 488 | + icon="ep:delete" |
| 489 | + :size="18" |
| 490 | + @click=" |
| 491 | + deleteTaskListenerMap( |
| 492 | + configForm[`task${listener.type}ListenerHeader`], |
| 493 | + index |
| 494 | + ) |
| 495 | + " |
481 | 496 | />
|
482 |
| - </el-select> |
483 |
| - </div> |
484 |
| - <div class="mr-2"> |
485 |
| - <el-input v-model="item.value" style="width: 160px" /> |
486 |
| - </div> |
487 |
| - <div class="mr-1 flex items-center"> |
488 |
| - <Icon |
489 |
| - icon="ep:delete" |
490 |
| - :size="18" |
491 |
| - @click="deleteTaskListenerMap(configForm.createTaskListenerHeader, index)" |
492 |
| - /> |
| 497 | + </div> |
493 | 498 | </div>
|
494 |
| - </div> |
495 |
| - <el-button |
496 |
| - type="primary" |
497 |
| - text |
498 |
| - @click="addTaskListenerMap(configForm.createTaskListenerHeader)" |
499 |
| - > |
500 |
| - <Icon icon="ep:plus" class="mr-5px" />添加一行 |
501 |
| - </el-button> |
502 |
| - </el-form-item> |
503 |
| - <el-form-item label="请求体" prop="createTaskListenerBody"> |
504 |
| - <div |
505 |
| - class="flex pt-2" |
506 |
| - v-for="(item, index) in configForm.createTaskListenerBody" |
507 |
| - :key="index" |
508 |
| - > |
509 |
| - <div class="mr-2"> |
510 |
| - <el-input v-model="item.key" style="width: 160px" /> |
511 |
| - </div> |
512 |
| - <div class="mr-2"> |
513 |
| - <el-select v-model="item.type" style="width: 100px"> |
514 |
| - <el-option |
515 |
| - v-for="types in LISTENER_MAP_TYPES" |
516 |
| - :key="types.value" |
517 |
| - :label="types.label" |
518 |
| - :value="types.value" |
| 499 | + <el-button |
| 500 | + type="primary" |
| 501 | + text |
| 502 | + @click="addTaskListenerMap(configForm[`task${listener.type}ListenerHeader`])" |
| 503 | + > |
| 504 | + <Icon icon="ep:plus" class="mr-5px" />添加一行 |
| 505 | + </el-button> |
| 506 | + </el-form-item> |
| 507 | + <el-form-item label="请求体"> |
| 508 | + <div |
| 509 | + class="flex pt-2" |
| 510 | + v-for="(item, index) in configForm[`task${listener.type}ListenerBody`]" |
| 511 | + :key="index" |
| 512 | + > |
| 513 | + <div class="mr-2"> |
| 514 | + <el-input class="w-160px" v-model="item.key" /> |
| 515 | + </div> |
| 516 | + <div class="mr-2"> |
| 517 | + <el-select class="w-100px!" v-model="item.type"> |
| 518 | + <el-option |
| 519 | + v-for="types in LISTENER_MAP_TYPES" |
| 520 | + :key="types.value" |
| 521 | + :label="types.label" |
| 522 | + :value="types.value" |
| 523 | + /> |
| 524 | + </el-select> |
| 525 | + </div> |
| 526 | + <div class="mr-2"> |
| 527 | + <el-input class="w-160px" v-model="item.value" /> |
| 528 | + </div> |
| 529 | + <div class="mr-1 flex items-center"> |
| 530 | + <Icon |
| 531 | + icon="ep:delete" |
| 532 | + :size="18" |
| 533 | + @click=" |
| 534 | + deleteTaskListenerMap( |
| 535 | + configForm[`task${listener.type}ListenerBody`], |
| 536 | + index |
| 537 | + ) |
| 538 | + " |
519 | 539 | />
|
520 |
| - </el-select> |
521 |
| - </div> |
522 |
| - <div class="mr-2"> |
523 |
| - <el-input v-model="item.value" style="width: 160px" /> |
524 |
| - </div> |
525 |
| - <div class="mr-1 flex items-center"> |
526 |
| - <Icon |
527 |
| - icon="ep:delete" |
528 |
| - :size="18" |
529 |
| - @click="deleteTaskListenerMap(configForm.createTaskListenerBody, index)" |
530 |
| - /> |
| 540 | + </div> |
531 | 541 | </div>
|
532 |
| - </div> |
533 |
| - <el-button |
534 |
| - type="primary" |
535 |
| - text |
536 |
| - @click="addTaskListenerMap(configForm.createTaskListenerBody)" |
537 |
| - > |
538 |
| - <Icon icon="ep:plus" class="mr-5px" />添加一行 |
539 |
| - </el-button> |
540 |
| - </el-form-item> |
| 542 | + <el-button |
| 543 | + type="primary" |
| 544 | + text |
| 545 | + @click="addTaskListenerMap(configForm[`task${listener.type}ListenerBody`])" |
| 546 | + > |
| 547 | + <Icon icon="ep:plus" class="mr-5px" />添加一行 |
| 548 | + </el-button> |
| 549 | + </el-form-item> |
| 550 | + </div> |
541 | 551 | </div>
|
542 |
| - |
543 |
| - <!-- TODO lesan:待实现 --> |
544 |
| - <el-divider content-position="left"> |
545 |
| - <el-text tag="b" size="large">指派任务执行人员</el-text> |
546 |
| - </el-divider> |
547 |
| - <el-form-item prop="assignTaskListenerEnable"> |
548 |
| - <el-switch |
549 |
| - v-model="configForm.assignTaskListenerEnable" |
550 |
| - active-text="开启" |
551 |
| - inactive-text="关闭" |
552 |
| - /> |
553 |
| - </el-form-item> |
554 |
| - |
555 |
| - <!-- TODO lesan:待实现 --> |
556 |
| - <el-divider content-position="left"> |
557 |
| - <el-text tag="b" size="large">完成任务</el-text> |
558 |
| - </el-divider> |
559 |
| - <el-form-item prop="completeTaskListenerEnable"> |
560 |
| - <el-switch |
561 |
| - v-model="configForm.completeTaskListenerEnable" |
562 |
| - active-text="开启" |
563 |
| - inactive-text="关闭" |
564 |
| - /> |
565 |
| - </el-form-item> |
566 | 552 | </el-form>
|
567 | 553 | </div>
|
568 | 554 | </el-tab-pane>
|
@@ -693,6 +679,21 @@ const formRules = reactive({
|
693 | 679 | assignEmptyHandlerUserIds: [{ required: true, message: '用户不能为空', trigger: 'change' }],
|
694 | 680 | assignStartUserHandlerType: [{ required: true }]
|
695 | 681 | })
|
| 682 | +// 监听器数组 |
| 683 | +const taskListener = ref([ |
| 684 | + { |
| 685 | + name: '创建任务', |
| 686 | + type: 'Create' |
| 687 | + }, |
| 688 | + { |
| 689 | + name: '指派任务执行人员', |
| 690 | + type: 'Assign' |
| 691 | + }, |
| 692 | + { |
| 693 | + name: '完成任务', |
| 694 | + type: 'Complete' |
| 695 | + } |
| 696 | +]) |
696 | 697 |
|
697 | 698 | const {
|
698 | 699 | configForm: tempConfigForm,
|
@@ -796,11 +797,25 @@ const saveConfig = async () => {
|
796 | 797 | // 设置按钮权限
|
797 | 798 | currentNode.value.buttonsSetting = buttonsSetting.value
|
798 | 799 | // 创建任务监听器
|
799 |
| - currentNode.value.createTaskListener = { |
800 |
| - enable: configForm.value.createTaskListenerEnable, |
801 |
| - path: configForm.value.createTaskListenerPath, |
802 |
| - header: configForm.value.createTaskListenerHeader, |
803 |
| - body: configForm.value.createTaskListenerBody |
| 800 | + currentNode.value.taskCreateListener = { |
| 801 | + enable: configForm.value.taskCreateListenerEnable ?? false, |
| 802 | + path: configForm.value.taskCreateListenerPath, |
| 803 | + header: configForm.value.taskCreateListenerHeader, |
| 804 | + body: configForm.value.taskCreateListenerBody |
| 805 | + } |
| 806 | + // 指派任务监听器 |
| 807 | + currentNode.value.taskAssignListener = { |
| 808 | + enable: configForm.value.taskAssignListenerEnable ?? false, |
| 809 | + path: configForm.value.taskAssignListenerPath, |
| 810 | + header: configForm.value.taskAssignListenerHeader, |
| 811 | + body: configForm.value.taskAssignListenerBody |
| 812 | + } |
| 813 | + // 完成任务监听器 |
| 814 | + currentNode.value.taskCompleteListener = { |
| 815 | + enable: configForm.value.taskCompleteListenerEnable ?? false, |
| 816 | + path: configForm.value.taskCompleteListenerPath, |
| 817 | + header: configForm.value.taskCompleteListenerHeader, |
| 818 | + body: configForm.value.taskCompleteListenerBody |
804 | 819 | }
|
805 | 820 |
|
806 | 821 | currentNode.value.showText = showText
|
@@ -853,11 +868,22 @@ const showUserTaskNodeConfig = (node: SimpleFlowNode) => {
|
853 | 868 | buttonsSetting.value = cloneDeep(node.buttonsSetting) || DEFAULT_BUTTON_SETTING
|
854 | 869 | // 4. 表单字段权限配置
|
855 | 870 | getNodeConfigFormFields(node.fieldsPermission)
|
856 |
| - // 5. 创建任务监听器 |
857 |
| - configForm.value.createTaskListenerEnable = node.createTaskListener.enable |
858 |
| - configForm.value.createTaskListenerPath = node.createTaskListener.path |
859 |
| - configForm.value.createTaskListenerHeader = node.createTaskListener.header ?? [] |
860 |
| - configForm.value.createTaskListenerBody = node.createTaskListener.body ?? [] |
| 871 | + // 5. 监听器 |
| 872 | + // 5.1 创建任务 |
| 873 | + configForm.value.taskCreateListenerEnable = node.taskCreateListener!.enable |
| 874 | + configForm.value.taskCreateListenerPath = node.taskCreateListener!.path |
| 875 | + configForm.value.taskCreateListenerHeader = node.taskCreateListener?.header ?? [] |
| 876 | + configForm.value.taskCreateListenerBody = node.taskCreateListener?.body ?? [] |
| 877 | + // 5.2 指派任务 |
| 878 | + configForm.value.taskAssignListenerEnable = node.taskAssignListener!.enable |
| 879 | + configForm.value.taskAssignListenerPath = node.taskAssignListener!.path |
| 880 | + configForm.value.taskAssignListenerHeader = node.taskAssignListener?.header ?? [] |
| 881 | + configForm.value.taskAssignListenerBody = node.taskAssignListener?.body ?? [] |
| 882 | + // 5.3 完成任务 |
| 883 | + configForm.value.taskCompleteListenerEnable = node.taskCompleteListener!.enable |
| 884 | + configForm.value.taskCompleteListenerPath = node.taskCompleteListener!.path |
| 885 | + configForm.value.taskCompleteListenerHeader = node.taskCompleteListener?.header ?? [] |
| 886 | + configForm.value.taskCompleteListenerBody = node.taskCompleteListener?.body ?? [] |
861 | 887 | }
|
862 | 888 |
|
863 | 889 | defineExpose({ openDrawer, showUserTaskNodeConfig }) // 暴露方法给父组件
|
|
0 commit comments