dengzedong
2024-11-28 5c475d3ac8ee98713e0f0962dd9464daccfb9eb1
提交 | 用户 | 时间
aff5c9 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="name">
11         <el-input v-model="formData.name" placeholder="请输入分组名称" />
12       </el-form-item>
13       <el-form-item label="排序" prop="sort">
1c5af8 14         <el-input-number v-model="formData.sort" :min="0" clearable controls-position="right" />
aff5c9 15       </el-form-item>
16
17     </el-form>
18     <template #footer>
19       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
20       <el-button @click="dialogVisible = false">取 消</el-button>
21     </template>
22   </Dialog>
23 </template>
24 <script lang="ts" setup>
25 import * as MpkGroupApi from '@/api/model/mpk/group'
26
27 defineOptions({ name: 'MpkGroupForm' })
28
29 const { t } = useI18n() // 国际化
30 const message = useMessage() // 消息弹窗
31
32 const dialogVisible = ref(false) // 弹窗的是否展示
33 const dialogTitle = ref('') // 弹窗的标题
34 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
35 const formType = ref('') // 表单的类型:create - 新增;update - 修改
36 const formData = ref({
37   id: undefined,
1c5af8 38   menuId: '',
aff5c9 39   name: '',
40   sort: undefined
41 })
42 const formRules = reactive({
43   name: [{ required: true, message: '名称不能为空', trigger: 'blur' }]
44 })
45 const formRef = ref() // 表单 Ref
46
47 /** 打开弹窗 */
1c5af8 48 const open = async (type: string, id?: string, menuId?: string) => {
aff5c9 49   dialogVisible.value = true
50   dialogTitle.value = t('action.' + type)
51   formType.value = type
52   resetForm()
1c5af8 53   if (menuId) {
54     formData.value.menuId = menuId
55   }
aff5c9 56   // 修改时,设置数据
57   if (id) {
58     formLoading.value = true
59     try {
60       formData.value = await MpkGroupApi.getGroup(id)
61     } finally {
62       formLoading.value = false
63     }
64   }
65 }
66 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
67
68 /** 提交表单 */
69 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
70 const submitForm = async () => {
71   // 校验表单
72   if (!formRef) return
73   const valid = await formRef.value.validate()
74   if (!valid) return
75   // 提交请求
76   formLoading.value = true
77   try {
78     const data = formData.value as MpkGroupApi.MpkGroupVO
79     if (formType.value === 'create') {
80       await MpkGroupApi.createGroup(data)
81       message.success(t('common.createSuccess'))
82     } else {
83       await MpkGroupApi.updateGroup(data)
84       message.success(t('common.updateSuccess'))
85     }
86     dialogVisible.value = false
87     // 发送操作成功的事件
88     emit('success')
89   } finally {
90     formLoading.value = false
91   }
92 }
93
94 /** 重置表单 */
95 const resetForm = () => {
96   formData.value = {
97     id: undefined,
98     name: '',
99     sort: undefined
100   }
101   formRef.value?.resetFields()
102 }
103 </script>