dsrw.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <div>
  3. <el-button type="primary" @click="dialogVisible = true">新增定时任务</el-button>
  4. <el-table :data="data" :row-selection="rowSelection">
  5. <el-table-column label="名称" width="360">
  6. <el-table-column prop="firstName" label="任务名称" width="180" />
  7. <el-table-column prop="lastName" label="空开名称" width="180" />
  8. </el-table-column>
  9. <el-table-column prop="age" label="设备类型" width="180" />
  10. <el-table-column prop="address" label="循环类型" width="180" />
  11. <el-table-column label="当前状态" width="180">
  12. <template #default="{ row }">
  13. <el-tag
  14. v-for="tag in row.tags"
  15. :key="tag"
  16. :type="getTagType(tag)"
  17. >
  18. {{ tag.toUpperCase() }}
  19. </el-tag>
  20. </template>
  21. </el-table-column>
  22. <el-table-column label="操作" width="180">
  23. <template #default="{ row }">
  24. <el-switch
  25. v-model="row.tags[0]"
  26. active-text="启用"
  27. inactive-text="停用"
  28. active-value="启用"
  29. inactive-value="停用"
  30. @change="toggleStatus(row)"
  31. />
  32. </template>
  33. </el-table-column>
  34. </el-table>
  35. <!-- 新增定时任务对话框 -->
  36. <el-dialog v-model="dialogVisible" title="新增定时任务">
  37. <el-form :model="newTask" label-width="100px">
  38. <el-form-item label="任务名称">
  39. <el-input v-model="newTask.firstName" />
  40. </el-form-item>
  41. <el-form-item label="空开名称">
  42. <el-input v-model="newTask.lastName" />
  43. </el-form-item>
  44. <el-form-item label="设备类型">
  45. <el-input-number v-model="newTask.age" />
  46. </el-form-item>
  47. <el-form-item label="循环类型">
  48. <el-select v-model="newTask.address" placeholder="请选择循环类型">
  49. <el-option label="预设类型1" value="预设类型1" />
  50. <el-option label="预设类型2" value="预设类型2" />
  51. </el-select>
  52. </el-form-item>
  53. </el-form>
  54. <template #footer>
  55. <span class="dialog-footer">
  56. <el-button @click="dialogVisible = false">取消</el-button>
  57. <el-button type="primary" @click="addTask">确定</el-button>
  58. </span>
  59. </template>
  60. </el-dialog>
  61. </div>
  62. </template>
  63. <script setup lang="ts">
  64. import { ref } from 'vue';
  65. import { ElButton, ElTable, ElTableColumn, ElTag, ElSwitch, ElDialog, ElForm, ElFormItem, ElInput, ElInputNumber, ElSelect, ElOption } from 'element-plus';
  66. interface DataType {
  67. key: string;
  68. firstName: string;
  69. lastName: string;
  70. age: number;
  71. address: string;
  72. tags: string[];
  73. }
  74. const data = ref<DataType[]>([
  75. {
  76. key: '1',
  77. firstName: '定时任务1',
  78. lastName: 'G845215',
  79. age: 88,
  80. address: '预设类型1',
  81. tags: ['启用'],
  82. },
  83. {
  84. key: '2',
  85. firstName: '定时任务2',
  86. lastName: 'G845212',
  87. age: 77,
  88. address: '预设类型1',
  89. tags: ['停用'],
  90. },
  91. {
  92. key: '3',
  93. firstName: '定时任务3',
  94. lastName: 'G845212',
  95. age: 77,
  96. address: '预设类型1',
  97. tags: ['停用'],
  98. },
  99. ]);
  100. const rowSelection = {};
  101. const dialogVisible = ref(false);
  102. const newTask = ref({
  103. key: '',
  104. firstName: '',
  105. lastName: '',
  106. age: 0,
  107. address: '',
  108. tags: ['启用'], // 默认状态为启用
  109. });
  110. const toggleStatus = (row: DataType) => {
  111. // 这里不需要额外逻辑,因为 ElSwitch 已经自动更新了 row.tags[0]
  112. };
  113. const addTask = () => {
  114. newTask.value.key = String(data.value.length + 1); // 自动生成唯一键
  115. data.value.push({ ...newTask.value });
  116. dialogVisible.value = false;
  117. newTask.value = {
  118. key: '',
  119. firstName: '',
  120. lastName: '',
  121. age: 0,
  122. address: '',
  123. tags: ['启用'],
  124. };
  125. };
  126. const getTagType = (tag: string): string => {
  127. switch (tag) {
  128. case '启用':
  129. return 'success';
  130. case '停用':
  131. return 'danger';
  132. default:
  133. return '';
  134. }
  135. };
  136. </script>
  137. <style scoped>
  138. /* 如果有其他特定样式需求,可以在这里添加 */
  139. </style>