view.vue 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <!-- 任务详细 -->
  3. <Dialog title="任务详细" v-model="modelVisible" width="700px" append-to-body>
  4. <el-form ref="formRef" :model="formData" label-width="200px">
  5. <el-row>
  6. <el-col :span="24">
  7. <el-form-item label="任务编号:">{{ formData.id }}</el-form-item>
  8. <el-form-item label="任务名称:">{{ formData.name }}</el-form-item>
  9. <el-form-item label="任务名称:">
  10. <dict-tag :type="DICT_TYPE.INFRA_JOB_STATUS" :value="formData.status" />
  11. </el-form-item>
  12. <el-form-item label="处理器的名字:">{{ formData.handlerName }}</el-form-item>
  13. <el-form-item label="处理器的参数:">{{ formData.handlerParam }}</el-form-item>
  14. <el-form-item label="cron表达式:">{{ formData.cronExpression }}</el-form-item>
  15. <el-form-item label="重试次数:">{{ formData.retryCount }}</el-form-item>
  16. <el-form-item label="重试间隔:">{{ formData.retryInterval + ' 毫秒' }}</el-form-item>
  17. <el-form-item label="监控超时时间:">{{
  18. formData.monitorTimeout > 0 ? formData.monitorTimeout + ' 毫秒' : '未开启'
  19. }}</el-form-item>
  20. <el-form-item label="后续执行时间:">
  21. <el-timeline class="pt-3">
  22. <el-timeline-item
  23. v-for="(activity, index) in nextTimes"
  24. :key="index"
  25. :timestamp="parseTime(activity)"
  26. >
  27. 第{{ index + 1 }}次
  28. </el-timeline-item>
  29. </el-timeline>
  30. </el-form-item>
  31. </el-col>
  32. </el-row>
  33. </el-form>
  34. <template #footer>
  35. <div class="dialog-footer">
  36. <el-button @click="close">关 闭</el-button>
  37. </div>
  38. </template>
  39. </Dialog>
  40. </template>
  41. <script setup lang="ts" name="JobView">
  42. import * as JobApi from '@/api/infra/job'
  43. import { parseTime } from './utils'
  44. import { DICT_TYPE } from '@/utils/dict'
  45. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  46. const { t } = useI18n() // 国际化
  47. const formRef = ref() // 表单 Ref
  48. const modelVisible = ref(false) // 弹窗的是否展示
  49. const modelTitle = ref('') // 弹窗的标题
  50. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  51. const formData = ref({
  52. id: undefined,
  53. name: '',
  54. handlerParam: '',
  55. handlerName: '',
  56. cronExpression: '',
  57. retryCount: true,
  58. retryInterval: '',
  59. monitorTimeout: 0,
  60. status: 0
  61. })
  62. const nextTimes = ref([])
  63. /** 打开弹窗 */
  64. const openModal = async (id?: number) => {
  65. modelVisible.value = true
  66. modelTitle.value = t('action.detail')
  67. // 查看,设置数据
  68. if (id) {
  69. formLoading.value = true
  70. try {
  71. formData.value = await JobApi.getJobApi(id)
  72. // 获取下一次执行时间
  73. nextTimes.value = await JobApi.getJobNextTimesApi(id)
  74. } finally {
  75. formLoading.value = false
  76. }
  77. }
  78. }
  79. defineExpose({ openModal }) // 提供 openModal 方法,用于打开弹窗
  80. const close = () => {
  81. modelVisible.value = false
  82. emit('success')
  83. }
  84. </script>