dengzedong
2024-11-28 5c475d3ac8ee98713e0f0962dd9464daccfb9eb1
提交 | 用户 | 时间
448126 1 <template>
2   <Dialog v-model="dialogVisible" :title="dialogTitle">
3     <el-form
4       ref="formRef"
5       v-loading="formLoading"
6       :model="formData"
7       :rules="formRules"
8       label-width="80px"
9     >
10       <el-form-item label="名称" prop="packName">
11         <el-input v-model="formData.packName" placeholder="请输入名称" />
12       </el-form-item>
13       <el-form-item label="描述" prop="packDesc">
14         <el-input v-model="formData.packDesc" placeholder="请输入包名描述" />
15       </el-form-item>
16       <el-form-item label="模型路径" prop="modelPath">
17         <el-input v-model="formData.modelPath" placeholder="请输入包名描述" />
18       </el-form-item>
19       <el-form-item label="排序" prop="sort">
20         <el-input-number v-model="formData.sort" :min="0" clearable controls-position="right" />
21       </el-form-item>
22
23     </el-form>
24     <template #footer>
25       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
26       <el-button @click="dialogVisible = false">取 消</el-button>
27     </template>
28   </Dialog>
29 </template>
30 <script lang="ts" setup>
31 import * as MpkPackApi from '@/api/model/mpk/pack'
32
33 defineOptions({ name: 'MpkPackForm' })
34
35 const { t } = useI18n() // 国际化
36 const message = useMessage() // 消息弹窗
37
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   packName: '',
45   packDesc: '',
46   modelPath: '',
47   sort: undefined
48 })
49 const formRules = reactive({
50   packName: [{ required: true, message: '名称不能为空', trigger: 'blur' }]
51 })
52 const formRef = ref() // 表单 Ref
53
54 /** 打开弹窗 */
55 const open = async (type: string, id?: string) => {
56   dialogVisible.value = true
57   dialogTitle.value = t('action.' + type)
58   formType.value = type
59   resetForm()
60   // 修改时,设置数据
61   if (id) {
62     formLoading.value = true
63     try {
64       formData.value = await MpkPackApi.getPack(id)
65     } finally {
66       formLoading.value = false
67     }
68   }
69 }
70 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
71
72 /** 提交表单 */
73 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
74 const submitForm = async () => {
75   // 校验表单
76   if (!formRef) return
77   const valid = await formRef.value.validate()
78   if (!valid) return
79   // 提交请求
80   formLoading.value = true
81   try {
82     const data = formData.value as MpkPackApi.MpkPackVO
83     if (formType.value === 'create') {
84       await MpkPackApi.createPack(data)
85       message.success(t('common.createSuccess'))
86     } else {
87       await MpkPackApi.updatePack(data)
88       message.success(t('common.updateSuccess'))
89     }
90     dialogVisible.value = false
91     // 发送操作成功的事件
92     emit('success')
93   } finally {
94     formLoading.value = false
95   }
96 }
97
98 /** 重置表单 */
99 const resetForm = () => {
100   formData.value = {
101     id: undefined,
102     packName: '',
103     packDesc: '',
104     sort: undefined
105   }
106   formRef.value?.resetFields()
107 }
108 </script>