tower.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <template>
  2. <el-container class="is-vertical">
  3. <sc-page-header>
  4. <template #extra-right>
  5. <el-button type="warning" @click="refreshState">刷新状态</el-button>
  6. </template>
  7. </sc-page-header>
  8. <scTable ref="xGridTable" :apiObj="$API.system.device" :formConfig="formConfig" :paramsColums="paramsColums" :toolbarConfig="toolbarConfig" :columns="columns"></scTable>
  9. </el-container>
  10. </template>
  11. <script setup>
  12. import moment from "moment";
  13. import XEUtils from "xe-utils";
  14. import API from "@/api";
  15. import TOOL from "@/utils/tool";
  16. import { gateTypeDic, deviceStateDic } from "@/utils/basicDic";
  17. import { mapFormItemInput, mapFormItemSelect } from "@/components/scTable/helper";
  18. const formatGate = ({ projectId, deviceNum }) => XEUtils.find(TOOL.data.get("TOWER_GATE"), item => XEUtils.findIndexOf(item.devices, d => d.project_id == projectId && d.device_num === deviceNum) !== -1)
  19. const projectConfig = reactive({
  20. options: TOOL.data.get("PROJECT"),
  21. optionProps: { label: "projectName", value: "fpiId" },
  22. events: {
  23. change: data => XEUtils.merge(formConfig.data, data)
  24. }
  25. })
  26. const toolbarConfig = reactive({
  27. enabled: true,
  28. print: false
  29. })
  30. const formConfig = reactive({
  31. data: {
  32. categoryId: 11,
  33. modelId: 14
  34. },
  35. items: [
  36. mapFormItemSelect("projectId", "所属项目", projectConfig),
  37. mapFormItemInput("deviceNum", "设备唯一标识")
  38. ]
  39. })
  40. const paramsColums = reactive([
  41. { column: "categoryId" },
  42. { column: "modelId" },
  43. { column: "projectId" },
  44. { column: "deviceNum" }
  45. ])
  46. const columns = reactive([
  47. { type: "seq", fixed: "left", width: 60 },
  48. { type: "html", field: "deviceCode", title: "设备唯一标识", fixed: "left", minWidth: 150, sortable: true, formatter: ({ cellValue, row }) => cellValue || row.deviceNum },
  49. { type: "html", field: "projectName", title: "所属项目", minWidth: 200, sortable: true, formatter: ({ cellValue, row }) => cellValue || XEUtils.get(XEUtils.find(TOOL.data.get("PROJECT"), item => item.fpiId === row.projectId), "projectName") },
  50. { type: "html", field: "groundName", title: "工地场区", minWidth: 150, sortable: true, formatter: ({ cellValue, row }) => cellValue || XEUtils.get(formatGate(row), "ground.groundName") },
  51. { type: "html", field: "mountedName", title: "安装点名称", minWidth: 150, sortable: true, formatter: ({ cellValue, row }) => cellValue || XEUtils.get(formatGate(row), "mountedName") },
  52. { field: "state", title: "在线状态", minWidth: 100, align: "center", formatter: ({ row }) => !TOOL.dateFormat(XEUtils.get(XEUtils.get(formatGate(row), "devices", []).find(d => d.device_num === row.deviceNum), "healthbeatTime")) || moment().diff(TOOL.dateFormat(XEUtils.get(XEUtils.get(formatGate(row), "devices", []).find(d => d.device_num === row.deviceNum), "healthbeatTime")), "minute") > 5 ? "离线" : "在线", editRender: { name: "$cell-tag" } }
  53. ])
  54. // 显示隐藏 筛选表单
  55. const xGridTable = ref();
  56. onMounted(() => window.addEventListener("setItemEvent", ({ key, newValue }) => key === "TOWER_GATE" && newValue && xGridTable.value?.reloadColumn(columns)))
  57. onUnmounted(() => window.removeEventListener("setItemEvent", () => {}));
  58. const router = useRouter();
  59. const refreshState = () => {
  60. if (moment().diff(XEUtils.get(XEUtils.toStringJSON(localStorage.getItem("TOWER_GATE")), "datetime"), "second") < -280) return ElMessage.warning("请勿重复刷新!(间隔时间至少20秒)");
  61. TOOL.data.remove("TOWER_GATE");
  62. router.getGates("tower");
  63. }
  64. </script>