index.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <template>
  2. <div class="monitor-site flex">
  3. <!-- 左侧内容 -->
  4. <div class="h-full flex-basis-385px p-10px flex flex-col">
  5. <SiteFilter class="flex-shrink-0 flex-grow-0" @submit="refreshTree" />
  6. <SiteTree
  7. class="w-full flex-grow-1 h-0 scroll-auto"
  8. :tree-data="treeData"
  9. @select="focusOnSite"
  10. />
  11. </div>
  12. <!-- 右侧内容 主要内容 -->
  13. <div class="h-full flex-grow-1 relative">
  14. <IFrame class="w-full h-full" :frame-src="monitorSiteOperationUrl" @message="handleMessage" />
  15. <SiteForm class="absolute w-full bg-#0960bd44 p-10px top-0" :site="selectedSite" />
  16. </div>
  17. </div>
  18. </template>
  19. <script setup lang="ts">
  20. import SiteTree from './components/siteTree.vue';
  21. import SiteFilter from './components/siteFilter.vue';
  22. import SiteForm from './components/siteForm.vue';
  23. import { onMounted, ref } from 'vue';
  24. import {
  25. MonitorSiteTreeParams,
  26. MonitorSiteTreeNode,
  27. MonitorSite,
  28. } from '@/api/sys/model/monitorModel';
  29. import {
  30. getMonitorSiteTree,
  31. postMonitorOperation,
  32. monitorSiteOperationUrl,
  33. handleMonitorOperation,
  34. } from '@/api/sys/monitor';
  35. import IFrame from '@/views/sys/iframe/index.vue';
  36. // 测点树相关,包含了刷新、请求的内容
  37. const treeData = ref<MonitorSiteTreeNode>();
  38. function refreshTree(params: MonitorSiteTreeParams) {
  39. getMonitorSiteTree(params).then((r) => {
  40. if (r.code === 200) treeData.value = r.data;
  41. });
  42. }
  43. // 选中的测点
  44. const selectedSite = ref<MonitorSite>();
  45. // 测点操作(iframe)相关,包括下发指令及处理消息
  46. // 聚焦到测点上
  47. function focusOnSite(site: MonitorSite) {
  48. selectedSite.value = site;
  49. postMonitorOperation({
  50. clickType: 'treePoint',
  51. id: site.mineCode,
  52. data: {},
  53. type: 'treeSensor',
  54. from: 'tank',
  55. });
  56. }
  57. function handleMessage(msg: any) {
  58. handleMonitorOperation(msg, (d) => {
  59. console.log(d);
  60. });
  61. }
  62. onMounted(() => {
  63. refreshTree({});
  64. });
  65. defineExpose({
  66. treeData,
  67. monitorSiteOperationUrl,
  68. selectedSite,
  69. refreshTree,
  70. focusOnSite,
  71. });
  72. </script>
  73. <style scoped>
  74. .monitor-site {
  75. width: 100%;
  76. height: 100vh;
  77. margin-top: 60px;
  78. }
  79. </style>