edit.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <el-dialog
  3. :title="textMap[dialogStatus]"
  4. v-model="dialogVisible"
  5. :width="dialogWidth"
  6. :before-close="clsoeDialog"
  7. :close-on-click-modal="false"
  8. >
  9. <div class="wrapper">
  10. <el-form class="form" ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="120px" style="width: 400px">
  11. <el-form-item label="模板名称" prop="title">
  12. <el-input v-model="temp.title" placeholder="请输入模板名称" />
  13. </el-form-item>
  14. <el-form-item label="读取模式" prop="mode">
  15. <el-select v-model="temp.mode" placeholder="请选择模式" class="filter-item" style="width: 100%" @change="handleModeChange">
  16. <!-- <el-option label="顺序读取" :value="0" /> -->
  17. <el-option label="批量读取" :value="1" />
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item label="备注" prop="remarks">
  21. <el-input v-model="temp.remarks" placeholder="请输入备注" />
  22. </el-form-item>
  23. </el-form>
  24. <el-tabs v-model="activeName" v-if="dialogStatus === 'update'" :key="tabsKey">
  25. <el-tab-pane label="数据区" name="1" v-if="temp.mode !== 0">
  26. <DataAreaDialog :templateNumber="temp.number" ref="dataAreaDialog" v-if="activeName === '1'" />
  27. </el-tab-pane>
  28. <el-tab-pane label="变量列表" name="2">
  29. <DeviceTemplateDialog :templateNumber="temp.number" :mode="temp.mode" ref="deviceTemplateDialog" v-if="activeName === '2'" />
  30. </el-tab-pane>
  31. </el-tabs>
  32. <div slot="footer" class="dialog-footer">
  33. <el-button @click="clsoeDialog"> 取 消 </el-button>
  34. <el-button type="primary" @click="dialogStatus === 'create' ? createData() : updateData()"> 保 存 </el-button>
  35. </div>
  36. </div>
  37. </el-dialog>
  38. </template>
  39. <script lang="ts">
  40. import api from '/@/api/device/modbus';
  41. import DataAreaDialog from './dataAreaDialog.vue';
  42. import DeviceTemplateDialog from './deviceTemplateDialog.vue';
  43. import { ElMessage } from 'element-plus';
  44. export default {
  45. components: {
  46. DataAreaDialog,
  47. DeviceTemplateDialog,
  48. },
  49. data() {
  50. return {
  51. temp: {
  52. title: '',
  53. mode: 1,
  54. remarks: '',
  55. number: '',
  56. },
  57. rules: {
  58. title: [{ required: true, message: '请输入模板名称', trigger: 'blur' }],
  59. mode: [{ required: true, message: '请选择模式', trigger: 'change' }],
  60. },
  61. dialogVisible: false,
  62. dialogStatus: '',
  63. textMap: {
  64. update: '模板详情',
  65. create: '添加模板',
  66. },
  67. activeName: '1',
  68. tabsKey: Date.now(),
  69. };
  70. },
  71. computed: {
  72. dialogWidth() {
  73. return this.dialogStatus === 'create' ? '500px' : '80%';
  74. },
  75. },
  76. methods: {
  77. open(dialogStatus: string, row: any) {
  78. this.dialogStatus = dialogStatus;
  79. this.tabsKey = Date.now();
  80. this.dialogVisible = true;
  81. if (row) {
  82. this.temp = { ...row };
  83. if (this.temp.mode === 0) {
  84. this.activeName = '2';
  85. }
  86. } else {
  87. this.getDataId();
  88. }
  89. },
  90. clsoeDialog() {
  91. this.activeName = '1';
  92. this.temp = {
  93. title: '',
  94. mode: 1,
  95. remarks: '',
  96. number: '',
  97. };
  98. (this.$refs.dataForm as any).resetFields()
  99. this.dialogVisible = false;
  100. },
  101. // 获取模板id 自动生成
  102. getDataId() {
  103. api.getDataId().then((res: any) => {
  104. this.temp.number = res.data_id;
  105. });
  106. },
  107. createData() {
  108. (this.$refs['dataForm'] as any).validate((valid: boolean) => {
  109. if (valid) {
  110. api.template.addTemplate(this.temp).then(() => {
  111. this.$emit('getList');
  112. this.clsoeDialog();
  113. ElMessage.success('操作成功!');
  114. });
  115. }
  116. });
  117. },
  118. updateData() {
  119. (this.$refs['dataForm'] as any).validate((valid: boolean) => {
  120. if (valid) {
  121. api.template.editTemplate(this.temp).then(() => {
  122. this.$emit('finish');
  123. this.clsoeDialog();
  124. ElMessage.success('操作成功!');
  125. });
  126. }
  127. });
  128. },
  129. handleModeChange(value: number) {
  130. if (value === 0) {
  131. this.activeName = '2';
  132. }
  133. },
  134. },
  135. };
  136. </script>
  137. <style lang="scss" scoped>
  138. .wrapper {
  139. max-height: 70vh;
  140. overflow-y: auto;
  141. }
  142. </style>