index.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <template>
  2. <el-card>
  3. <el-form :model="searchForm" ref="searchFormRef" :inline="true" class="search-form">
  4. <el-form-item label="终端状态" prop="status">
  5. <el-select v-model="searchForm.status" placeholder="请选择">
  6. <el-option
  7. v-for="item in statusOptions"
  8. :key="item.value"
  9. :label="item.label"
  10. :value="item.value"
  11. />
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item label="是否处理延期" prop="isDelayed">
  15. <el-select v-model="searchForm.isDelayed" placeholder="请选择">
  16. <el-option
  17. v-for="item in isDelayedOptions"
  18. :key="item.value"
  19. :label="item.label"
  20. :value="item.value"
  21. />
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="异常时间段" prop="timeRange">
  25. <el-select v-model="searchForm.timeRange" placeholder="请选择">
  26. <el-option
  27. v-for="item in timeRangeOptions"
  28. :key="item.value"
  29. :label="item.label"
  30. :value="item.value"
  31. />
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="开始时间" prop="startDate">
  35. <el-date-picker
  36. v-model="searchForm.startDate"
  37. type="date"
  38. placeholder="选择日期"
  39. value-format="yyyy-MM-dd"
  40. />
  41. </el-form-item>
  42. <el-form-item label="结束时间" prop="endDate">
  43. <el-date-picker
  44. v-model="searchForm.endDate"
  45. type="date"
  46. placeholder="选择日期"
  47. value-format="yyyy-MM-dd"
  48. />
  49. </el-form-item>
  50. <el-form-item>
  51. <el-button type="primary" @click="handleSearch">查询</el-button>
  52. <el-button @click="resetSearch">重置</el-button>
  53. </el-form-item>
  54. </el-form>
  55. <el-table :data="filteredTerminals" border stripe>
  56. <el-table-column prop="status" label="终端状态" width="120" />
  57. <el-table-column prop="terminalId" label="终端编号" width="120" />
  58. <el-table-column prop="terminalName" label="终端名称" width="120" />
  59. <el-table-column prop="relatedCoverId" label="关联井盖设备编号" width="120" />
  60. <el-table-column prop="address" label="终端详细地址" width="120" />
  61. <el-table-column prop="abnormalStatus" label="异常状态" width="120" />
  62. <el-table-column prop="abnormalStartTime" label="异常开始时间" width="120" />
  63. <el-table-column prop="handlingStatus" label="处理状态" width="120" />
  64. <el-table-column prop="handlingEndTime" label="处理结束时间" width="120" />
  65. <el-table-column prop="recoveryTime" label="设备恢复时间" width="120" />
  66. <el-table-column prop="handler" label="处理人" width="120" />
  67. <el-table-column prop="isDelayed" label="是否处理延期" width="120" />
  68. <el-table-column prop="timeRange" label="异常时间段" width="120" />
  69. </el-table>
  70. <el-pagination
  71. background
  72. layout="prev, pager, next"
  73. :total="terminals.length"
  74. :page-size="10"
  75. @current-change="handleCurrentChange"
  76. />
  77. <el-button type="primary" @click="exportTerminals">导出</el-button>
  78. </el-card>
  79. </template>
  80. <script setup>
  81. import { ref, computed } from 'vue';
  82. import { ElMessage, ElMessageBox } from 'element-plus';
  83. // import * as XLSX from 'xlsx'; // 导出数据到 Excel
  84. // 模拟数据
  85. const terminals = ref([
  86. {
  87. status: '异常',
  88. terminalId: 'T20230915001',
  89. terminalName: '终端A',
  90. relatedCoverId: 'C20230915001',
  91. address: '上海市浦东新区陆家嘴环路1000号',
  92. abnormalStatus: '信号弱',
  93. abnormalStartTime: '2023-09-15',
  94. handlingStatus: '处理中',
  95. handlingEndTime: '2023-09-16',
  96. recoveryTime: '2023-09-17',
  97. handler: '张三',
  98. isDelayed: false,
  99. timeRange: '24小时内',
  100. },
  101. // 更多模拟数据...
  102. ]);
  103. // 搜索表单
  104. const searchForm = ref({
  105. status: '',
  106. isDelayed: '',
  107. timeRange: '',
  108. startDate: null,
  109. endDate: null,
  110. });
  111. // 状态选项
  112. const statusOptions = ref([
  113. { value: '正常', label: '正常' },
  114. { value: '异常', label: '异常' },
  115. ]);
  116. // 是否处理延期选项
  117. const isDelayedOptions = ref([
  118. { value: true, label: '是' },
  119. { value: false, label: '否' },
  120. ]);
  121. // 异常时间段选项
  122. const timeRangeOptions = ref([
  123. { value: '24小时内', label: '24小时内' },
  124. { value: '48小时内', label: '48小时内' },
  125. { value: '72小时内', label: '72小时内' },
  126. { value: '72小时外', label: '72小时外' },
  127. ]);
  128. // 过滤后的终端列表
  129. const filteredTerminals = computed(() => {
  130. return terminals.value.filter(terminal => {
  131. return (
  132. (!searchForm.value.status || terminal.status === searchForm.value.status) &&
  133. (!searchForm.value.isDelayed || terminal.isDelayed === searchForm.value.isDelayed) &&
  134. (!searchForm.value.timeRange || terminal.timeRange === searchForm.value.timeRange) &&
  135. (!searchForm.value.startDate || terminal.abnormalStartTime >= searchForm.value.startDate) &&
  136. (!searchForm.value.endDate || terminal.abnormalStartTime <= searchForm.value.endDate)
  137. );
  138. });
  139. });
  140. // 处理搜索按钮点击事件
  141. function handleSearch() {
  142. // 这里可以添加进一步的逻辑,例如调用后端API进行数据过滤
  143. }
  144. // 处理重置按钮点击事件
  145. function resetSearch() {
  146. Object.assign(searchForm.value, {
  147. status: '',
  148. isDelayed: '',
  149. timeRange: '',
  150. startDate: null,
  151. endDate: null,
  152. });
  153. }
  154. // 处理分页改变事件
  155. function handleCurrentChange(page) {
  156. // 这里可以添加分页逻辑
  157. }
  158. // 导出终端数据
  159. function exportTerminals() {
  160. // 导出数据的逻辑
  161. }
  162. </script>