ValidationResult.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <!-- 验证结果组件 -->
  2. <template>
  3. <div class="validation-result">
  4. <div v-if="!validationResult" class="no-validation">
  5. <el-text type="info" size="small">
  6. <Icon icon="ep:info-filled" />
  7. 点击"验证配置"按钮检查规则配置
  8. </el-text>
  9. </div>
  10. <div v-else class="validation-content">
  11. <el-alert
  12. :title="validationResult.valid ? '配置验证通过' : '配置验证失败'"
  13. :description="validationResult.message"
  14. :type="validationResult.valid ? 'success' : 'error'"
  15. :closable="false"
  16. show-icon
  17. >
  18. <template #default>
  19. <div v-if="validationResult.valid" class="success-content">
  20. <p>{{ validationResult.message || '所有配置项验证通过,规则可以正常运行' }}</p>
  21. <div class="success-tips">
  22. <Icon icon="ep:check" class="tip-icon" />
  23. <span class="tip-text">规则配置完整且有效</span>
  24. </div>
  25. </div>
  26. <div v-else class="error-content">
  27. <p>{{ validationResult.message || '配置验证失败,请检查以下问题' }}</p>
  28. <div class="error-tips">
  29. <div class="tip-item">
  30. <Icon icon="ep:warning-filled" class="tip-icon error" />
  31. <span class="tip-text">请确保所有必填项都已配置</span>
  32. </div>
  33. <div class="tip-item">
  34. <Icon icon="ep:warning-filled" class="tip-icon error" />
  35. <span class="tip-text">请检查触发器和执行器配置是否正确</span>
  36. </div>
  37. </div>
  38. </div>
  39. </template>
  40. </el-alert>
  41. </div>
  42. </div>
  43. </template>
  44. <script setup lang="ts">
  45. /** 验证结果组件 */
  46. defineOptions({ name: 'ValidationResult' })
  47. interface Props {
  48. validationResult?: { valid: boolean; message?: string } | null
  49. }
  50. defineProps<Props>()
  51. </script>
  52. <style scoped>
  53. .validation-result {
  54. width: 100%;
  55. }
  56. .no-validation {
  57. text-align: center;
  58. padding: 20px 0;
  59. }
  60. .validation-content {
  61. width: 100%;
  62. }
  63. .success-content,
  64. .error-content {
  65. margin-top: 8px;
  66. }
  67. .success-content p,
  68. .error-content p {
  69. margin: 0 0 8px 0;
  70. font-size: 14px;
  71. line-height: 1.5;
  72. }
  73. .success-tips,
  74. .error-tips {
  75. display: flex;
  76. flex-direction: column;
  77. gap: 4px;
  78. }
  79. .tip-item {
  80. display: flex;
  81. align-items: center;
  82. gap: 6px;
  83. }
  84. .tip-icon {
  85. font-size: 12px;
  86. flex-shrink: 0;
  87. }
  88. .tip-icon:not(.error) {
  89. color: var(--el-color-success);
  90. }
  91. .tip-icon.error {
  92. color: var(--el-color-danger);
  93. }
  94. .tip-text {
  95. font-size: 12px;
  96. color: var(--el-text-color-secondary);
  97. }
  98. .success-tips .tip-text {
  99. color: var(--el-color-success-dark-2);
  100. }
  101. .error-tips .tip-text {
  102. color: var(--el-color-danger-dark-2);
  103. }
  104. </style>