liriming
2025-03-03 8bb7160c9c4fd7ce5893ee673647b13cc35410ae
提交 | 用户 | 时间
3933d8 1 <template>
D 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-row :gutter="8">
11         <el-col :span="12">
12           <el-form-item label="参数名称" prop="name">
13             <el-input v-model="formData.name" placeholder=""/>
14           </el-form-item>
15         </el-col>
16         <el-col :span="12">
17           <el-form-item label="参数类型" prop="valueType">
18             <el-select v-model="formData.valueType">
19               <el-option
20                 v-for="item in getDictOptions(DICT_TYPE.MODEL_METHOD_SETTING_VALUE_TYPE)"
21                 :key="item.value"
22                 :label="item.label"
23                 :value="item.value"
24               />
25             </el-select>
26           </el-form-item>
27         </el-col>
28       </el-row>
29       <el-row :gutter="8">
30         <el-col :span="12">
31           <el-form-item label="key" prop="settingKey">
32             <el-input v-model="formData.settingKey" placeholder=""/>
33           </el-form-item>
34         </el-col>
35         <el-col :span="12">
36           <el-form-item label="value" prop="settingValue">
37             <el-input v-model="formData.settingValue" placeholder=""/>
38           </el-form-item>
39         </el-col>
40       </el-row>
41     </el-form>
42     <template #footer>
43       <el-button type="primary" @click="submitForm">确 定</el-button>
44       <el-button @click="dialogVisible = false">取 消</el-button>
45     </template>
46   </Dialog>
47 </template>
48 <script lang="ts" setup>
49   import {DICT_TYPE,getDictOptions} from '@/utils/dict';
50   import {FormRules} from 'element-plus'
51
52
53   const {t} = useI18n() // 国际化
54   const message = useMessage() // 消息弹窗
55
56   const dialogVisible = ref(false) // 弹窗的是否展示
57   const dialogTitle = ref('参数设置') // 弹窗的标题
58   const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
59   const formData = ref({
60     settingKey: undefined,
61     settingValue: undefined,
62     name: undefined,
63     valueType: undefined
64   })
65
66
67   const formRules = reactive<FormRules>({
68     settingKey: [
69       {required: true, message: 'key不能为空', trigger: 'blur'},
70     ],
71     settingValue: [
72       {required: true, message: 'value不能为空', trigger: 'blur'},
73     ],
74     name: [
75       {required: true, message: '参数名称不能为空', trigger: 'blur'},
76     ],
77     valueType: [
78       {required: true, message: '参数类型不能为空', trigger: 'blur'},
79     ]
80   })
81
82   const formRef = ref() // 表单 Ref
83
84   let methodSettingsRef = undefined
85   let infoRef = undefined
86   /** 打开弹窗 */
87   const open = async (info,methodSettings) => {
88     dialogVisible.value = true
89     resetForm()
90     // 修改时,设置数据
91     if (info) {
92       infoRef = info
93       formLoading.value = true
94       try {
95         formData.value = {...info}
96       } finally {
97         formLoading.value = false
98       }
99     }else {
100       methodSettingsRef = methodSettings
101     }
102   }
103   defineExpose({open}) // 提供 open 方法,用于打开弹窗
104
105
106   // 数据回调
107   const emit = defineEmits(['addSettingCallback'])
108   /** 提交表单 */
109   const submitForm = async () => {
110     // 校验表单
111     if (!formRef) return
112     const valid = await formRef.value.validate()
113     if (!valid) return
114
115     // 提交请求
116     formLoading.value = true
117     try {
118       if (infoRef) {
119         // 修改
120         for (let key in formData.value) {
121           infoRef[key] = formData.value[key];
122         }
123         infoRef = undefined;
124       }else {
125         // 新增
126         methodSettingsRef.push({...formData.value})
127       }
128       dialogVisible.value = false
129     } finally {
130       formLoading.value = false
131     }
132   }
133
134   /** 重置表单 */
135   const resetForm = () => {
136     formData.value = {
137       settingKey: undefined,
138       settingValue: undefined,
139       name: undefined,
140       valueType: undefined,
141     }
142     formRef.value?.resetFields()
143   }
144 </script>