addOrEditTemplateTask.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <!-- 添加或者修改设备 -->
  2. <template>
  3. <el-dialog
  4. :title="isEdit ? '修改模版点位' : '添加模版点位'"
  5. v-model="dialogVisible"
  6. width="600px"
  7. :before-close="closeDialog"
  8. :close-on-click-modal="false"
  9. >
  10. <el-form ref="formRef" :rules="formRules" :model="ruleForm" label-position="left" label-width="120px" style="width: 90%; margin: 0 auto">
  11. <el-form-item label="点位名称" prop="title">
  12. <el-input v-model="ruleForm.title" placeholder="请输入点位名称" />
  13. </el-form-item>
  14. <el-form-item label="数据项编码" prop="dataAttribName">
  15. <el-input v-model="ruleForm.dataAttribName" placeholder="请输入数据项编码" />
  16. </el-form-item>
  17. <el-form-item label="数据项点位" prop="dataAddress">
  18. <el-input type="number" :min="0" v-model.number="ruleForm.dataAddress" placeholder="请输入数据项点位" />
  19. </el-form-item>
  20. <el-form-item label="倍率" prop="dataCoef">
  21. <el-input v-model="ruleForm.dataCoef" placeholder="请输入倍率" />
  22. </el-form-item>
  23. </el-form>
  24. <template #footer>
  25. <el-button v-auth="'cancelData'" @click="closeDialog()"> 取 消 </el-button>
  26. <el-button v-auth="'saveData'" :loading="btnLoading" type="primary" @click="submitData"> 保 存 </el-button>
  27. </template>
  28. </el-dialog>
  29. </template>
  30. <script lang="ts" setup>
  31. import { computed, reactive, ref, onMounted } from 'vue';
  32. import api from '/@/api/ice104/index';
  33. import { ElMessage } from 'element-plus';
  34. import { useSearch } from '/@/hooks/useCommonIce104';
  35. import apiDevice from '/@/api/device';
  36. import { useRoute } from 'vue-router';
  37. const route = useRoute();
  38. const dialogVisible = ref(false);
  39. const btnLoading = ref(false);
  40. const emit = defineEmits(['updateList']);
  41. const formRef = ref();
  42. const ruleForm = ref({
  43. dtId: 0,
  44. title: '',
  45. templateNumber: route.params && route.params.id,
  46. dataAttribName: '',
  47. dataAddress: 0,
  48. DataCoef: ''
  49. })
  50. const isEdit = ref(false);
  51. const formRules = computed(() => ({
  52. title: [{ required: true, trigger: 'blur', message: '请输入点位名称' }],
  53. dataAttribName: [{ required: true, trigger: 'blur', message: '请输入数据项编码' }],
  54. dataAddress: [{ required: true, trigger: 'blur', message: '请输入数据项点位' }],
  55. dataCoef: [{ required: true, trigger: 'blur', message: '请输入倍率' }],
  56. }));
  57. const getRandom = (num:number) =>{
  58. return Math.floor((Math.random()+Math.floor(Math.random()*9+1))*Math.pow(10,num-1));
  59. }
  60. const submitData = async () => {
  61. formRef.value.validate((valid: boolean) => {
  62. if (!valid) return
  63. btnLoading.value = true
  64. if (isEdit.value) {
  65. // 修改
  66. api.deviceTemplate.editItem({
  67. ...ruleForm.value,
  68. })
  69. .then(() => {
  70. ElMessage({ type: 'success', message: '修改成功' })
  71. emit('updateList')
  72. closeDialog()
  73. })
  74. .finally(() => (btnLoading.value = false))
  75. } else {
  76. // 新增
  77. ruleForm.value.dtId = getRandom(10);
  78. api.deviceTemplate.addItem(ruleForm.value)
  79. .then(() => {
  80. ElMessage({ type: 'success', message: '添加成功' })
  81. emit('updateList')
  82. closeDialog()
  83. })
  84. .finally(() => (btnLoading.value = false))
  85. }
  86. })
  87. }
  88. /**
  89. * 关闭弹窗
  90. */
  91. const closeDialog = () => {
  92. dialogVisible.value = false;
  93. isEdit.value = false;
  94. ruleForm.value = {
  95. dtId: 0,
  96. title: '',
  97. templateNumber: route.params && route.params.id,
  98. dataAttribName: '',
  99. dataAddress: 0,
  100. DataCoef: ''
  101. }
  102. }
  103. const open = async (row: any) => {
  104. dialogVisible.value = true
  105. if (row && row.dtId.toString()) {
  106. row.DataCoef = row.dataCoef
  107. ruleForm.value = row;
  108. isEdit.value = true;
  109. }else {
  110. isEdit.value = false;
  111. }
  112. }
  113. defineExpose({ open })
  114. </script>
  115. <style lang="scss" scoped>
  116. .width100 {
  117. width: 100%;
  118. }
  119. </style>