IotAlarmSettingForm.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <template>
  2. <Dialog :title="dialogTitle" v-model="dialogVisible">
  3. <el-form
  4. ref="formRef"
  5. :model="formData"
  6. :rules="formRules"
  7. label-width="100px"
  8. v-loading="formLoading"
  9. >
  10. <el-form-item label="分类名称" prop="classifyName">
  11. <el-input v-model="formData.classifyName" disabled />
  12. </el-form-item>
  13. <el-form-item label="设备编码" prop="deviceName" v-if="ifDevice">
  14. <el-input v-model="formData.deviceName" disabled />
  15. </el-form-item>
  16. <el-form-item label="告警属性" prop="alarmProperty">
  17. <!-- <el-input v-model="formData.alarmProperty" placeholder="请输入告警属性" />-->
  18. <el-select v-model="formData.alarmProperty" placeholder="请选择告警属性" clearable filterable @change="propertyChange">
  19. <el-option
  20. v-for="dict in specs"
  21. :key="dict.identifier"
  22. :label="dict.modelName"
  23. :value="dict.modelName"
  24. />
  25. </el-select>
  26. </el-form-item>
  27. <el-form-item label="属性标识" prop="propertyCode">
  28. <el-input v-model="formData.propertyCode" placeholder="请输入属性标识" disabled />
  29. </el-form-item>
  30. <el-form-item label="上限值" prop="maxValue">
  31. <el-input v-model="formData.maxValue" placeholder="请输入上限" />
  32. </el-form-item>
  33. <el-form-item label="下限值" prop="minValue">
  34. <el-input v-model="formData.minValue" placeholder="请输入下限" />
  35. </el-form-item>
  36. </el-form>
  37. <template #footer>
  38. <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
  39. <el-button @click="dialogVisible = false">取 消</el-button>
  40. </template>
  41. </Dialog>
  42. </template>
  43. <script setup lang="ts">
  44. import { IotAlarmSettingApi, IotAlarmSettingVO } from '@/api/pms/alarm'
  45. import {IotDeviceApi} from "@/api/pms/device";
  46. import {DICT_TYPE, getStrDictOptions} from "@/utils/dict";
  47. /** 告警设置 表单 */
  48. defineOptions({ name: 'IotAlarmSettingForm' })
  49. const { t } = useI18n() // 国际化
  50. const message = useMessage() // 消息弹窗
  51. const dialogVisible = ref(false) // 弹窗的是否展示
  52. const dialogTitle = ref('') // 弹窗的标题
  53. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  54. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  55. const specs = ref([])
  56. const formData = ref({
  57. id: undefined,
  58. classifyId: undefined,
  59. classifyName: undefined,
  60. deviceId: undefined,
  61. deviceName: undefined,
  62. maxValue: undefined,
  63. minValue: undefined,
  64. alarmProperty: undefined,
  65. propertyCode: undefined,
  66. })
  67. const formRules = reactive({
  68. classifyName: [{ required: true, message: '分类不能为空', trigger: 'blur' }],
  69. alarmProperty: [{ required: true, message: '告警属性不能为空', trigger: 'blur' }],
  70. propertyCode: [{ required: true, message: '属性标识不能为空', trigger: 'blur' }],
  71. // maxValue: [{ required: true, message: '上限不能为空', trigger: 'blur' }],
  72. // minValue: [{ required: true, message: '下限不能为空', trigger: 'blur' }],
  73. })
  74. const formRef = ref() // 表单 Ref
  75. const ifDevice = ref(false)
  76. /** 打开弹窗 */
  77. const open = async (type: string, id?: number,classId:any, className:any,deviceId:any, deviceName:any) => {
  78. debugger
  79. dialogVisible.value = true
  80. dialogTitle.value = '新增设置'
  81. formType.value = type
  82. resetForm()
  83. formData.value.classifyId = classId;
  84. formData.value.classifyName = className;
  85. formData.value.deviceId = deviceId;
  86. formData.value.deviceName = deviceName;
  87. ifDevice.value = !(deviceId === '' || deviceId === undefined);
  88. // 修改时,设置数据
  89. if (id) {
  90. dialogTitle.value = '编辑设置'
  91. formLoading.value = true
  92. try {
  93. formData.value = await IotAlarmSettingApi.getIotAlarmSetting(id)
  94. } finally {
  95. formLoading.value = false
  96. }
  97. }
  98. if (deviceId) {
  99. await IotDeviceApi.getIotDeviceTds(deviceId).then(res => {
  100. specs.value = res
  101. specs.value = specs.value.sort((a, b) => {
  102. return b.modelOrder - a.modelOrder
  103. })
  104. })
  105. }
  106. }
  107. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  108. /** 提交表单 */
  109. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  110. const submitForm = async () => {
  111. // 校验表单
  112. await formRef.value.validate()
  113. // 提交请求
  114. formLoading.value = true
  115. try {
  116. const data = formData.value as unknown as IotAlarmSettingVO
  117. if (formType.value === 'create') {
  118. await IotAlarmSettingApi.createIotAlarmSetting(data)
  119. message.success(t('common.createSuccess'))
  120. } else {
  121. await IotAlarmSettingApi.updateIotAlarmSetting(data)
  122. message.success(t('common.updateSuccess'))
  123. }
  124. dialogVisible.value = false
  125. // 发送操作成功的事件
  126. emit('success',ifDevice.value?'2':'1')
  127. } finally {
  128. formLoading.value = false
  129. }
  130. }
  131. const propertyChange = (value) =>{
  132. debugger
  133. const model = specs.value.filter((item) => item.modelName === value)
  134. formData.value.propertyCode = model[0].identifier
  135. }
  136. /** 重置表单 */
  137. const resetForm = () => {
  138. formData.value = {
  139. id: undefined,
  140. classifyId: undefined,
  141. classifyName: undefined,
  142. deviceId: undefined,
  143. deviceName: undefined,
  144. maxValue: undefined,
  145. minValue: undefined,
  146. alarmProperty: undefined,
  147. }
  148. formRef.value?.resetFields()
  149. }
  150. </script>