潘志宝
2024-11-22 df90c0c5cfa4de114798015b92120ad8ba8b4826
提交 | 用户 | 时间
f87d4e 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="fieldCode">
11         <el-input v-model="formData.fieldCode" placeholder="请输入英文名" />
12       </el-form-item>
13       <el-form-item label="中文名" prop="fieldName">
14         <el-input v-model="formData.fieldName" placeholder="请输入中文名" />
15       </el-form-item>
16       <el-form-item label="数据类型" prop="fieldType">
17         <el-select v-model="formData.fieldType" placeholder="请选择">
18           <el-option
19             v-for="dict in getStrDictOptions(DICT_TYPE.DATA_FIELD_TYPE)"
20             :key="dict.value"
21             :label="dict.label"
22             :value="dict.value"
23           />
24         </el-select>
25       </el-form-item>
26       <el-form-item label="显示排序" prop="sort">
27         <el-input-number v-model="formData.sort" :min="0" controls-position="right" />
28       </el-form-item>
29     </el-form>
30     <template #footer>
31       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
32       <el-button @click="dialogVisible = false">取 消</el-button>
33     </template>
34   </Dialog>
35 </template>
36 <script lang="ts" setup>
37   import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
38   import * as DataSetFieldApi from '@/api/data/ind/data/data.field'
39   import { CommonStatusEnum } from '@/utils/constants'
40
41   defineOptions({ name: 'IndDataSetFieldForm' })
42
43   const { t } = useI18n() // 国际化
44   const message = useMessage() // 消息弹窗
45
46   const dialogVisible = ref(false) // 弹窗的是否展示
47   const dialogTitle = ref('') // 弹窗的标题
48   const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
49   const formType = ref('') // 表单的类型:create - 新增;update - 修改
50   const formData = ref({
51     id: undefined,
52     dataSetId: '',
53     fieldCode: '',
54     fieldName: '',
55     fieldType: '',
56     sort: undefined
57   })
58   const formRules = reactive({
59     fieldCode: [{ required: true, message: '数据标签不能为空', trigger: 'blur' }],
60     fieldName: [{ required: true, message: '数据键值不能为空', trigger: 'blur' }],
61     sort: [{ required: true, message: '数据顺序不能为空', trigger: 'blur' }]
62   })
63   const formRef = ref() // 表单 Ref
64
65   /** 打开弹窗 */
66   const open = async (type: string, id?: number, dataSetId?: string) => {
67     dialogVisible.value = true
68     dialogTitle.value = t('action.' + type)
69     formType.value = type
70     resetForm()
71     if (dataSetId) {
72       formData.value.dataSetId = dataSetId
73     }
74     // 修改时,设置数据
75     if (id) {
76       formLoading.value = true
77       try {
78         formData.value = await DataSetFieldApi.getDataSetField(id)
79       } finally {
80         formLoading.value = false
81       }
82     }
83   }
84   defineExpose({ open }) // 提供 open 方法,用于打开弹窗
85
86   /** 提交表单 */
87   const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
88   const submitForm = async () => {
89     // 校验表单
90     if (!formRef) return
91     const valid = await formRef.value.validate()
92     if (!valid) return
93     // 提交请求
94     formLoading.value = true
95     try {
96       const data = formData.value as DataSetFieldApi.DataSetFieldVO
97       if (formType.value === 'create') {
98         await DataSetFieldApi.createDataSetField(data)
99         message.success(t('common.createSuccess'))
100       } else {
101         await DataSetFieldApi.updateDataSetField(data)
102         message.success(t('common.updateSuccess'))
103       }
104       dialogVisible.value = false
105       // 发送操作成功的事件
106       emit('success')
107     } finally {
108       formLoading.value = false
109     }
110   }
111
112   /** 重置表单 */
113   const resetForm = () => {
114     formData.value = {
115       id: undefined,
116       dataSetId: '',
117       fieldCode: '',
118       fieldName: '',
119       fieldType: '',
120       sort: undefined
121     }
122     formRef.value?.resetFields()
123   }
124 </script>