沙钢智慧能源系统前端代码
houzhongjian
2024-10-09 314507f8ddadd9c66e98d260c3b2a5dad1a04015
提交 | 用户 | 时间
314507 1 <template>
H 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="type">
14         <el-input
15           v-model="formData.type"
16           :disabled="typeof formData.id !== 'undefined'"
17           placeholder="请输入参数名称"
18         />
19       </el-form-item>
20       <el-form-item label="状态" prop="status">
21         <el-radio-group v-model="formData.status">
22           <el-radio
23             v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
24             :key="dict.value"
25             :label="dict.value"
26           >
27             {{ dict.label }}
28           </el-radio>
29         </el-radio-group>
30       </el-form-item>
31       <el-form-item label="备注" prop="remark">
32         <el-input v-model="formData.remark" placeholder="请输入内容" type="textarea" />
33       </el-form-item>
34     </el-form>
35     <template #footer>
36       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
37       <el-button @click="dialogVisible = false">取 消</el-button>
38     </template>
39   </Dialog>
40 </template>
41 <script lang="ts" setup>
42 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
43 import * as DictTypeApi from '@/api/system/dict/dict.type'
44 import { CommonStatusEnum } from '@/utils/constants'
45
46 defineOptions({ name: 'SystemDictTypeForm' })
47
48 const { t } = useI18n() // 国际化
49 const message = useMessage() // 消息弹窗
50
51 const dialogVisible = ref(false) // 弹窗的是否展示
52 const dialogTitle = ref('') // 弹窗的标题
53 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
54 const formType = ref('') // 表单的类型:create - 新增;update - 修改
55 const formData = ref({
56   id: undefined,
57   name: '',
58   type: '',
59   status: CommonStatusEnum.ENABLE,
60   remark: ''
61 })
62 const formRules = reactive({
63   name: [{ required: true, message: '字典名称不能为空', trigger: 'blur' }],
64   type: [{ required: true, message: '字典类型不能为空', trigger: 'blur' }],
65   status: [{ required: true, message: '状态不能为空', trigger: 'change' }]
66 })
67 const formRef = ref() // 表单 Ref
68
69 /** 打开弹窗 */
70 const open = async (type: string, id?: number) => {
71   dialogVisible.value = true
72   dialogTitle.value = t('action.' + type)
73   formType.value = type
74   resetForm()
75   // 修改时,设置数据
76   if (id) {
77     formLoading.value = true
78     try {
79       formData.value = await DictTypeApi.getDictType(id)
80     } finally {
81       formLoading.value = false
82     }
83   }
84 }
85 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
86
87 /** 提交表单 */
88 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
89 const submitForm = async () => {
90   // 校验表单
91   if (!formRef) return
92   const valid = await formRef.value.validate()
93   if (!valid) return
94   // 提交请求
95   formLoading.value = true
96   try {
97     const data = formData.value as DictTypeApi.DictTypeVO
98     if (formType.value === 'create') {
99       await DictTypeApi.createDictType(data)
100       message.success(t('common.createSuccess'))
101     } else {
102       await DictTypeApi.updateDictType(data)
103       message.success(t('common.updateSuccess'))
104     }
105     dialogVisible.value = false
106     // 发送操作成功的事件
107     emit('success')
108   } finally {
109     formLoading.value = false
110   }
111 }
112
113 /** 重置表单 */
114 const resetForm = () => {
115   formData.value = {
116     id: undefined,
117     type: '',
118     name: '',
119     status: CommonStatusEnum.ENABLE,
120     remark: ''
121   }
122   formRef.value?.resetFields()
123 }
124 </script>