dengzedong
2025-02-27 c1f166d492e9e1ebbd1be11ee7a46fc125df8464
提交 | 用户 | 时间
e26cd3 1 <template>
D 2   <Dialog v-model="dialogVisible" :title="dialogTitle" width="50%">
3     <el-form
4       ref="formRef"
5       v-loading="formLoading"
6       :model="formData"
7       :rules="formRules"
8       label-width="120px"
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-select
15           v-model="formData.type"
16           clearable
17           placeholder="请选择归档周期"
18         >
19           <el-option
20             v-for="dict in getDictOptions(DICT_TYPE.ARC_TYPE)"
21             :key="dict.value"
22             :label="dict.label"
23             :value="dict.value"
24           />
25         </el-select>
26       </el-form-item>
27       <el-form-item label="归档点位" prop="point">
28             <el-select
29               v-model="formData.point"
30               filterable
31               placeholder="请选择归档点位">
32               <el-option
33                 v-for="(item, index) in pointList"
34                 :key="index"
35                 :label="item.pointName"
36                 :value="item.pointNo"/>
37             </el-select>
38       </el-form-item>
39       <el-form-item label="计算方法" prop="calculate">
40         <el-select
41           v-model="formData.calculate"
42           clearable
43           placeholder="请选择计算方法"
44         >
45           <el-option
46             v-for="dict in getDictOptions(DICT_TYPE.ARC_CALCULATE_TYPE)"
47             :key="dict.value"
48             :label="dict.label"
49             :value="dict.value"
50           />
51         </el-select>
52       </el-form-item>
53       <el-form-item label="是否启用" prop="isEnable">
54         <el-select
55           v-model="formData.isEnable"
56           clearable
57           placeholder="请选择是否启用"
58         >
59           <el-option
60             v-for="dict in getIntDictOptions(DICT_TYPE.COM_IS_INT)"
61             :key="dict.value"
62             :label="dict.label"
63             :value="dict.value"
64           />
65         </el-select>
66       </el-form-item>
67     </el-form>
68     <template #footer>
69       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
70       <el-button @click="dialogVisible = false">取 消</el-button>
71     </template>
72   </Dialog>
73 </template>
74 <script lang="ts" setup>
75   import {DICT_TYPE, getDictOptions, getIntDictOptions} from "@/utils/dict";
76   import * as ArcDataApi from '@/api/data/arc'
77   import { CommonStatusEnum } from '@/utils/constants'
78   import * as DaPoint from "@/api/data/da/point";
79
80   defineOptions({ name: 'ArcSettingForm' })
81
82   const { t } = useI18n() // 国际化
83   const message = useMessage() // 消息弹窗
84   const dialogVisible = ref(false) // 弹窗的是否展示
85   const dialogTitle = ref('') // 弹窗的标题
86   const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
87   const formType = ref('') // 表单的类型:create - 新增;update - 修改
88   const formData = ref({
89     id: undefined,
90     name: undefined,
91     type: undefined,
92     point: undefined,
93     calculate: undefined,
94     isEnable: 1
95   })
96   const formRules = reactive({
97     name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
98     type: [{ required: true, message: '归档周期不能为空', trigger: 'blur' }],
99     point: [{ required: true, message: '归档点位不能为空', trigger: 'blur' }],
100     calculate: [{ required: true, message: '计算方法不能为空', trigger: 'blur' }]
101   })
102   const formRef = ref() // 表单 Ref
103   const pointList = ref([{
104     pointName: '',
105     pointNo: ''
106   }])
107   const queryParams = reactive({
108     pointTypes: "MEASURE,CONSTANT",
109   })
110   /** 打开弹窗 */
111   const open = async (type: string, id?: number) => {
112     dialogVisible.value = true
113     dialogTitle.value = t('action.' + type)
114     formType.value = type
115     resetForm()
116     getPointList()
117     // 修改时,设置数据
118     if (id) {
119       formLoading.value = true
120       try {
121         formData.value = await ArcDataApi.getArcSetting(id)
122       } finally {
123         formLoading.value = false
124       }
125     }
126   }
127   defineExpose({ open }) // 提供 open 方法,用于打开弹窗
128
129   /** 提交表单 */
130   const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
131   const submitForm = async () => {
132     // 校验表单
133     if (!formRef) return
134     const valid = await formRef.value.validate()
135     if (!valid) return
136     // 提交请求
137     formLoading.value = true
138     try {
139       const data = formData.value as unknown as ArcDataApi.ArcSettingVO
140       if (formType.value === 'create') {
141         await ArcDataApi.createArcSetting(data)
142         message.success(t('common.createSuccess'))
143       } else {
144         await ArcDataApi.updateArcSetting(data)
145         message.success(t('common.updateSuccess'))
146       }
147       dialogVisible.value = false
148       // 发送操作成功的事件
149       emit('success')
150     } finally {
151       formLoading.value = false
152     }
153   }
154   const getPointList = async () => {
155     pointList.value = await DaPoint.getPointSimpleList(queryParams)
156   }
157   /** 重置表单 */
158   const resetForm = () => {
159     formData.value = {
160       id: undefined,
161       name: undefined,
162       type: undefined,
163       point: undefined,
164       calculate: undefined,
165       isEnable: 1
166     }
167     formRef.value?.resetFields()
168   }
169 </script>