WorkflowSettings.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <div class="workflow-settings">
  3. <div class="mb-4 flex">
  4. <div class="flex-1">
  5. <p class="mb-1 capitalize">
  6. {{ t('workflow.settings.onError.title') }}
  7. </p>
  8. <ui-select v-model="settings.onError" class="w-full max-w-sm">
  9. <option v-for="item in onError" :key="item.id" :value="item.id">
  10. {{ t(`workflow.settings.onError.items.${item.name}`) }}
  11. </option>
  12. </ui-select>
  13. </div>
  14. <label v-if="settings.onError === 'restart-workflow'" class="ml-2">
  15. <p class="mb-1 capitalize">
  16. {{ t('workflow.settings.restartWorkflow.for') }}
  17. </p>
  18. <div class="flex items-center bg-input transition-colors rounded-lg">
  19. <input
  20. v-model.number="settings.restartTimes"
  21. type="number"
  22. class="py-2 px-4 w-32 rounded-lg bg-transparent"
  23. />
  24. <span class="px-2">
  25. {{ t('workflow.settings.restartWorkflow.times') }}
  26. </span>
  27. </div>
  28. </label>
  29. </div>
  30. <div>
  31. <p class="mb-1 capitalize">
  32. {{ t('workflow.settings.blockDelay.title') }}
  33. <span :title="t('workflow.settings.blockDelay.description')">
  34. &#128712;
  35. </span>
  36. </p>
  37. <ui-input
  38. v-model.number="settings.blockDelay"
  39. type="number"
  40. class="w-full max-w-sm"
  41. />
  42. </div>
  43. <div class="flex mt-6">
  44. <ui-switch v-model="settings.debugMode" class="mr-4" />
  45. <p class="capitalize">{{ t('workflow.settings.debugMode') }}</p>
  46. </div>
  47. <div class="flex mt-6">
  48. <ui-switch v-model="settings.reuseLastState" class="mr-4" />
  49. <p class="capitalize">{{ t('workflow.settings.reuseLastState') }}</p>
  50. </div>
  51. <div class="flex mt-6">
  52. <ui-switch v-model="settings.saveLog" class="mr-4" />
  53. <p class="capitalize">{{ t('workflow.settings.saveLog') }}</p>
  54. </div>
  55. <div class="flex mt-6">
  56. <ui-switch v-model="settings.executedBlockOnWeb" class="mr-4" />
  57. <p class="capitalize">{{ t('workflow.settings.executedBlockOnWeb') }}</p>
  58. </div>
  59. </div>
  60. </template>
  61. <script setup>
  62. import { onMounted, reactive, watch } from 'vue';
  63. import { useI18n } from 'vue-i18n';
  64. import { debounce } from '@/utils/helper';
  65. const props = defineProps({
  66. workflow: {
  67. type: Object,
  68. default: () => ({}),
  69. },
  70. });
  71. const emit = defineEmits(['update']);
  72. const { t } = useI18n();
  73. const onError = [
  74. {
  75. id: 'keep-running',
  76. name: 'keepRunning',
  77. },
  78. {
  79. id: 'stop-workflow',
  80. name: 'stopWorkflow',
  81. },
  82. {
  83. id: 'restart-workflow',
  84. name: 'restartWorkflow',
  85. },
  86. ];
  87. const settings = reactive({
  88. restartTimes: 3,
  89. });
  90. watch(
  91. settings,
  92. debounce((newSettings) => {
  93. emit('update', {
  94. settings: newSettings,
  95. });
  96. }, 500),
  97. { deep: true }
  98. );
  99. onMounted(() => {
  100. Object.assign(settings, props.workflow.settings);
  101. });
  102. </script>