houzhongjian
2024-11-27 533610403a4640268fa0feb54203aa32a72678b6
提交 | 用户 | 时间
39f3e9 1 <template>
2   <Dialog v-model="dialogVisible" :title="dialogTitle" width="50%">
3     <el-form
4       ref="formRef"
5       v-loading="formLoading"
6       :model="formData"
7       :rules="formRules"
8       label-width="120px"
9     >
10       <el-form-item label="bean名称" prop="beanName">
11         <el-input v-model="formData.beanName" placeholder="请输入bean名称" />
12       </el-form-item>
13       <el-form-item label="参数" prop="params">
14         <el-input v-model="formData.params" placeholder="请输入参数" />
15       </el-form-item>
16       <el-form-item label="cron表达式" prop="cronExpression">
17         <el-input v-model="formData.cronExpression" placeholder="请输入cron表达式" />
18       </el-form-item>
19       <el-form-item label="备注" prop="remark">
20         <el-input v-model="formData.remark" placeholder="请输入备注" type="textarea" />
21       </el-form-item>
22     </el-form>
23     <template #footer>
24       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
25       <el-button @click="dialogVisible = false">取 消</el-button>
26     </template>
27   </Dialog>
28 </template>
29 <script lang="ts" setup>
30   import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
31   import * as ScheduleJobApi from '@/api/data/job'
32   import { CommonStatusEnum } from '@/utils/constants'
33
34   defineOptions({ name: 'DataScheduleJobForm' })
35
36   const { t } = useI18n() // 国际化
37   const message = useMessage() // 消息弹窗
38   const dialogVisible = ref(false) // 弹窗的是否展示
39   const dialogTitle = ref('') // 弹窗的标题
40   const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
41   const formType = ref('') // 表单的类型:create - 新增;update - 修改
42   const formData = ref({
43     id: undefined,
44     beanName: undefined,
45     params: undefined,
46     cronExpression: undefined,
47     remark: undefined,
48     status: 0
49   })
50   const formRules = reactive({
51     beanName: [{ required: true, message: 'bean名称不能为空', trigger: 'blur' }],
52     cronExpression: [{ required: true, message: 'cron表达式不能为空', trigger: 'blur' }]
53   })
54   const formRef = ref() // 表单 Ref
55
56   /** 打开弹窗 */
57   const open = async (type: string, id?: number) => {
58     dialogVisible.value = true
59     dialogTitle.value = t('action.' + type)
60     formType.value = type
61     resetForm()
62     // 修改时,设置数据
63     if (id) {
64       formLoading.value = true
65       try {
66         formData.value = await ScheduleJobApi.getScheduleJob(id)
67       } finally {
68         formLoading.value = false
69       }
70     }
71   }
72   defineExpose({ open }) // 提供 open 方法,用于打开弹窗
73
74   /** 提交表单 */
75   const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
76   const submitForm = async () => {
77     // 校验表单
78     if (!formRef) return
79     const valid = await formRef.value.validate()
80     if (!valid) return
81     // 提交请求
82     formLoading.value = true
83     try {
84       const data = formData.value as unknown as ScheduleJobApi.ScheduleJobVO
85       if (formType.value === 'create') {
86         await ScheduleJobApi.createScheduleJob(data)
87         message.success(t('common.createSuccess'))
88       } else {
89         await ScheduleJobApi.updateScheduleJob(data)
90         message.success(t('common.updateSuccess'))
91       }
92       dialogVisible.value = false
93       // 发送操作成功的事件
94       emit('success')
95     } finally {
96       formLoading.value = false
97     }
98   }
99
100   /** 重置表单 */
101   const resetForm = () => {
102     formData.value = {
103       id: undefined,
104       beanName: undefined,
105       params: undefined,
106       cronExpression: undefined,
107       remark: undefined,
108       status: 0
109     }
110     formRef.value?.resetFields()
111   }
112 </script>