sqbj.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <div class="p-5">
  3. <div class="w-30% flex items-center gap-4 mb-4">
  4. <span class="whitespace-nowrap">选择时间:</span>
  5. <el-date-picker
  6. v-model="dateRange"
  7. type="daterange"
  8. range-separator="至"
  9. start-placeholder="开始日期"
  10. end-placeholder="结束日期"
  11. class="flex-grow w-full"
  12. clearable
  13. />
  14. <el-button type="primary" @click="search">搜索</el-button>
  15. </div>
  16. <el-table :data="tableData" v-loading="tableLoading" border stripe>
  17. <el-table-column prop="imeiCardNumber" label="设备编号" width="200" />
  18. <el-table-column prop="batteryLevel" label="电池电量" />
  19. <el-table-column label="报警状态" align="center">
  20. <template #default="scope">
  21. <el-tag
  22. :type="scope.row.alarmStatus === 0 ? 'success' : 'danger'"
  23. effect="dark"
  24. >
  25. <div class="flex items-center">
  26. <AlertTriangle v-if="scope.row.alarmStatus === 1" class="w-4 h-4 mr-1" />
  27. {{ scope.row.alarmStatus === 0 ? "正常" : "告警" }}
  28. </div>
  29. </el-tag>
  30. </template>
  31. </el-table-column>
  32. <el-table-column prop="tiltAngle" label="倾斜角度" />
  33. <el-table-column prop="createTime" label="创建时间" width="400" />
  34. </el-table>
  35. <pagination
  36. v-show="totals > 0"
  37. :total="totals"
  38. v-model:page="currentPage"
  39. v-model:limit="pageSize"
  40. @pagination="getManholeAllData"
  41. />
  42. </div>
  43. </template>
  44. <script setup>
  45. import { ref, onMounted } from "vue";
  46. import { ElMessage } from "element-plus";
  47. import { getflipalarmDataAll } from "@/api/ldzh/index";
  48. import { parseTime } from "@/utils/ruoyi.js";
  49. const tableData = ref([]);
  50. const totals = ref(0);
  51. const dateRange = ref([]);
  52. const tableLoading = ref(false);
  53. const currentPage = ref(1);
  54. const pageSize = ref(10);
  55. // 构建查询参数
  56. const buildQueryParams = () => ({
  57. pageNum: currentPage.value,
  58. pageSize: pageSize.value,
  59. query: [
  60. { column: "water_infiltration_alarm_status", type: "ne", value: "0" },
  61. ...(dateRange.value?.length === 2
  62. ? [
  63. {
  64. column: "create_time",
  65. type: "between",
  66. value: `${parseTime(dateRange.value[0])},${parseTime(dateRange.value[1])}`,
  67. },
  68. ]
  69. : []),
  70. ],
  71. });
  72. // 获取数据
  73. const getManholeAllData = async () => {
  74. try {
  75. tableLoading.value = true;
  76. const res = await getflipalarmDataAll(buildQueryParams());
  77. if (res.code !== 200) {
  78. ElMessage.error(res.msg);
  79. return;
  80. }
  81. totals.value = res.data.total;
  82. tableData.value = res.data.records || [];
  83. if (totals.value === 0) {
  84. ElMessage.warning("暂无数据");
  85. }
  86. } catch (error) {
  87. console.error("获取数据失败:", error);
  88. ElMessage.error("数据加载失败,请稍后重试");
  89. } finally {
  90. tableLoading.value = false;
  91. }
  92. };
  93. // 搜索时重置页码
  94. const search = () => {
  95. currentPage.value = 1;
  96. getManholeAllData();
  97. };
  98. // 初始化加载
  99. onMounted(getManholeAllData);
  100. </script>
  101. <style scoped>
  102. .flex-grow {
  103. flex-grow: 1;
  104. max-width: 400px;
  105. }
  106. </style>