edit.vue 3.9 KB

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