瀏覽代碼

风险-病例;风险人员、场所

yang1998 1 周之前
父節點
當前提交
dd5d5a51f5

+ 4 - 4
src/store/dialog.js

@@ -142,8 +142,8 @@ export const useDialogStore = defineStore('dialog', {
 
   },
   // 使用插件的配置选项
-  persist: {
-    key: 'dialog-store',// 自定义存储的键名
-    storage: sessionStorage // 切换为 sessionStorage
-  }
+  // persist: {
+  //   key: 'dialog-store',// 自定义存储的键名
+  //   storage: sessionStorage // 切换为 sessionStorage
+  // }
 })

+ 24 - 0
src/utils/map/AddLayer.js

@@ -422,3 +422,27 @@ export function createMap() {
 
   });
 }
+
+export function resultHighlight(layerId, objectId) {
+  invokeParams('ResultHighlight', {
+    "layerId": layerId,
+    "objectId": objectId
+  });
+}
+
+export function setHeatmap(show, data) {
+  invokeParams('SetHeatmap', {
+    "show": show,
+    "data": data,
+    "heatmapRenderer": {},
+    "simpleRenderer": {}
+  });
+}
+
+export function setDistrictResult(show, data) {
+  invokeParams('setDistrictResult', {
+    "show": true,
+    "data": data,
+    "renderer": {}
+  });
+}

+ 53 - 6
src/utils/map/baseMethod.js

@@ -9,7 +9,7 @@ import {
   removeMapLayers,
   setCamera,
   addMyGraphByData_TJ,
-  addPointMap, layerShade, addPointSearch, layerControl,
+  addPointMap, layerShade, addPointSearch, layerControl, setHeatmap,
 } from '@/utils/map/AddLayer.js';
 import {analogData, districtArr, getGroupLayers, getLayerInfo} from '@/utils/mapService/local-data.js';
 import { useRoute } from 'vue-router';
@@ -712,6 +712,14 @@ export function handleChinaCasePoint(bol) {
   }
 }
 
+//病例功能
+export function handleCase(bol) {
+  handleCasePoint(bol)
+  handleCaseRelPoints(bol)
+  if(!bol){
+    handleJtlxPoints(bol)
+  }
+}
 
 //处置进展-病例撒点
 export function handleCasePoint(bol) {
@@ -738,7 +746,6 @@ export function handleCasePoint(bol) {
   }
 }
 
-
 //处置进展-病例相关撒点
 export function handleCaseRelPoints(bol) {
   if(bol){
@@ -912,7 +919,7 @@ export function handleJtlxPoints(bol){
           }),
       },
       // new URL(`@/assets/img/pinpoint(1).png`, import.meta.url).href,
-      "images/red.png",
+      "images/sadian/疾控中心.png",
     );
     addMultiImagePoints(
       'jtlx-points',
@@ -966,7 +973,7 @@ export function handleJtlxPoints(bol){
           }),
       },
       // new URL(`@/assets/img/pinpoint(1).png`, import.meta.url).href,
-      "images/sadian/海关.png",
+      "images/sadian/火车站.png",
     );
     addMultiImagePoints(
       'jtlx-points',
@@ -984,7 +991,7 @@ export function handleJtlxPoints(bol){
           }),
       },
       // new URL(`@/assets/img/pinpoint(1).png`, import.meta.url).href,
-      "images/sadian/海关.png",
+      "images/sadian/机场.png",
     );
     addMultiImagePoints(
       'jtlx-points',
@@ -1002,7 +1009,7 @@ export function handleJtlxPoints(bol){
           }),
       },
       // new URL(`@/assets/img/pinpoint(1).png`, import.meta.url).href,
-      "images/sadian/物流中心.png",
+      "images/sadian/汽车站.png",
     );
     addMultiImagePoints(
       'jtlx-points',
@@ -1027,3 +1034,43 @@ export function handleJtlxPoints(bol){
   }
 }
 
+//所有病例撒点
+export function handleAllCasesPoints(bol){
+  if(bol){
+    removeMapLayers("allCase-points")
+    addMultiImagePoints(
+      'allCase-points',
+      {
+        data: analogData["病例"].features
+          .filter((el) => el.geometry !== null)
+          .map((item, index) => {
+            return {
+              attributes: {
+                ...item.properties,
+                objectId: index
+              },
+              mapx: analogData["人员实时gps位置"][index].x,
+              mapy: analogData["人员实时gps位置"][index].y,
+            };
+          }),
+      },
+      // new URL(`@/assets/img/pinpoint(1).png`, import.meta.url).href,
+      "images/sadian/病例.png",
+    );
+  }else {
+    removeMapLayers("allCase-points")
+  }
+}
+
+//病例热点
+export function handleHeatMap(bol){
+  setHeatmap(bol, analogData["热力图_天平路街道"].features
+    .filter((el) => el.geometry !== null)
+    .map((item, index) => {
+      return {
+        mapx: item.geometry.coordinates[0],
+        mapy: item.geometry.coordinates[1],
+      };
+    }),)
+}
+

文件差異過大導致無法顯示
+ 113127 - 0
src/utils/mapService/local-data.js


+ 3 - 10
src/views/left/comp/dispose/RiskProfile.vue

@@ -206,7 +206,7 @@ import { useDialogStore } from '@/store/dialog'
 let dialogStore = useDialogStore()
 
 import { useRightPanelStore } from "@/store/rightPanel";
-import {handleCasePoint, handleCaseRelPoints, handleJtlxPoints} from "@/utils/map/baseMethod.js";
+import {handleCase, handleCasePoint, handleCaseRelPoints, handleJtlxPoints} from "@/utils/map/baseMethod.js";
 const rightPanelStore = useRightPanelStore();
 
 const headerObj = ref({
@@ -311,23 +311,16 @@ function openTestResDialogHandle () {
   dialogStore.setRiskTestResDialogOpen(true)
 }
 
-const initCasePoints = () => {
-  handleCasePoint(true)
-  handleCaseRelPoints(true)
-}
-
 // 在组件挂载后初始化 ECharts
 onMounted(() => {
   initTimeChart()
   initAreaChart()
 
-  initCasePoints()
+  handleCase(true)
 })
 
 onBeforeUnmount(() => {
-  handleCasePoint(false)
-  handleCaseRelPoints(false)
-  handleJtlxPoints(false)
+  handleCase(false)
 })
 </script>
 <style lang="scss" scoped>

+ 12 - 2
src/views/left/comp/dispose/dialog/RiskLocationDialog.vue

@@ -1,11 +1,12 @@
 <template>
-  <RiskDialog :options="dialogOptions" @close="closeClick">  </RiskDialog>
+  <RiskDialog :options="dialogOptions" @close="closeClick" @row-click="rowClick">  </RiskDialog>
 </template>
 <script setup>
 import RiskDialog from './RiskDialog'
-import { ref, watch, computed, reactive, toRefs, onBeforeMount, onMounted } from 'vue'
+import {ref, watch, computed, reactive, toRefs, onBeforeMount, onMounted, onBeforeUnmount} from 'vue'
 const emit = defineEmits(['closeClick'])
 import { useDialogStore } from '@/store/dialog'
+import {handleCase} from "@/utils/map/baseMethod.js";
 let dialogStore = useDialogStore()
 
 const dialogOptions = {
@@ -57,6 +58,15 @@ const tableData = ref([])
 function closeClick() {
   dialogStore.setRiskLocationDialogOpen(false)
 }
+function rowClick(row) {
+  console.log(row);
+  handleCase(false)
+  handleCase(true)
+}
+
+onBeforeUnmount(() => [
+  handleCase(false)
+])
 
 </script>
 <style lang="scss" scoped>

+ 13 - 2
src/views/left/comp/dispose/dialog/RiskPersonnelDialog.vue

@@ -1,11 +1,12 @@
 <template>
-  <RiskDialog :options="dialogOptions" @close="closeClick"></RiskDialog>
+  <RiskDialog :options="dialogOptions" @close="closeClick" @row-click="rowClick"></RiskDialog>
 </template>
 <script setup>
 import RiskDialog from './RiskDialog'
-import { ref, watch, computed, reactive, toRefs, onBeforeMount, onMounted } from 'vue'
+import { ref, watch, computed, reactive, toRefs, onBeforeMount, onMounted, onBeforeUnmount } from 'vue'
 const emit = defineEmits(['closeClick'])
 import { useDialogStore } from '@/store/dialog'
+import {handleCase} from "@/utils/map/baseMethod.js";
 let dialogStore = useDialogStore()
 
 const dialogOptions = {
@@ -72,6 +73,16 @@ function closeClick() {
   // emit('closeClick')
   dialogStore.setRiskPersonnelDialogOpen(false)
 }
+
+function rowClick(row) {
+  console.log(row);
+  handleCase(false)
+  handleCase(true)
+}
+
+onBeforeUnmount(() => [
+  handleCase(false)
+])
 </script>
 <style lang="scss" scoped>
 .dialog_container {

+ 76 - 36
src/views/left/dialog/components/dialog/CaseManageNodeDialog.vue

@@ -22,7 +22,7 @@
       </div>
     </div>
 
-    <el-table :data="dialogOptions.tableData" class="dialog_table" @row-click="handleRowClick" :row-class-name="tableRowClassName">
+    <el-table :data="dialogOptions.tableData" class="dialog_table" @row-click="handleRowClick" @row-dblclick="handleRowDblClick" :row-class-name="tableRowClassName">
       <el-table-column
         v-for="(column, colIndex) in dialogOptions.tableColumns"
         :key="`col_${colIndex}_${column.prop}`"
@@ -45,8 +45,11 @@
 
 <script setup>
 import CaseDetailDiaog from './CaseDetailDiaog'
-import { ref, watch } from 'vue'
+import {onBeforeUnmount, onMounted, ref, watch} from 'vue'
 import { useDialogStore } from '@/store/dialog'
+import {changeStreet, handleAllCasesPoints, handleCase} from "@/utils/map/baseMethod.js";
+import {ClearMap, resultHighlight} from "@/utils/map/AddLayer.js";
+import {analogData} from "@/utils/mapService/local-data.js";
 let dialogStore = useDialogStore()
 const emit = defineEmits(['close', 'button-click', 'row-click'])
 
@@ -95,39 +98,45 @@ const dialogOptions = ref({
   ],
   tableColumns: [
     { type: 'index', label: '序号', width: '80' },
-    { prop: 'code', label: '病例编号' },
-    { prop: 'name', label: '姓名' }
+    { prop: '风险编号', label: '病例编号' },
+    { prop: '姓名', label: '姓名' }
   ],
-  tableData: [
-    // 数据...
-    { code: '18-2024-1207-01-猴痘', name: '张嘉佳' },
-    { code: '05-2024-1207-01-猴痘', name: '孙忆枫' },
-    { code: '31-2024-1207-01-疟疾', name: '杨静云' },
-    { code: '31-2024-1207-01-疟疾', name: '王乐康' },
-    { code: '01-2024-1207-01-猩红热', name: '李怡悦' },
-    { code: '01-2024-1207-01-猩红热', name: '庞慧' },
-    { code: '01-2024-1207-01-猩红热', name: '李书易' },
-    { code: '01-2024-1207-01-猩红热', name: '胡小小' },
-    { code: '01-2024-1207-01-猩红热', name: '周乐心' },
-    { code: '01-2024-1207-01-猩红热', name: '杨松生' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '顾伦' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '王漫' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '尹丽娜' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '池子仪' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '李赫' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '傅彭薄' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '裴谊育' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '鲍业宝' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '黄隆心' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '侯彩蕊' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻04-2024-1207-01-聚集性呕吐腹泻', name: '冯立俏' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '宫臻' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '毛妹莲' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '孔崧谊' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '宁淑曼' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '明忱冶' },
-    { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '叶洵歆' }
-  ]
+  // tableData: [
+  //   // 数据...
+  //   { code: '18-2024-1207-01-猴痘', name: '张嘉佳' },
+  //   { code: '05-2024-1207-01-猴痘', name: '孙忆枫' },
+  //   { code: '31-2024-1207-01-疟疾', name: '杨静云' },
+  //   { code: '31-2024-1207-01-疟疾', name: '王乐康' },
+  //   { code: '01-2024-1207-01-猩红热', name: '李怡悦' },
+  //   { code: '01-2024-1207-01-猩红热', name: '庞慧' },
+  //   { code: '01-2024-1207-01-猩红热', name: '李书易' },
+  //   { code: '01-2024-1207-01-猩红热', name: '胡小小' },
+  //   { code: '01-2024-1207-01-猩红热', name: '周乐心' },
+  //   { code: '01-2024-1207-01-猩红热', name: '杨松生' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '顾伦' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '王漫' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '尹丽娜' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '池子仪' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '李赫' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '傅彭薄' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '裴谊育' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '鲍业宝' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '黄隆心' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '侯彩蕊' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻04-2024-1207-01-聚集性呕吐腹泻', name: '冯立俏' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '宫臻' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '毛妹莲' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '孔崧谊' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '宁淑曼' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '明忱冶' },
+  //   { code: '04-2024-1207-01-聚集性呕吐腹泻', name: '叶洵歆' }
+  // ]
+  tableData: analogData["病例"].features.map((item, index) => {
+    return {
+      ...item.properties,
+      objectId: index
+    };
+  }),
 })
 
 const btnActiveIndex = ref(0)
@@ -143,10 +152,32 @@ const handleClose = () => {
    dialogStore.setCaseManageNodeDialogOpen(false)
 }
 
+const clickTimer = ref(null)
 // 表格行点击
-const handleRowClick = row => {
+const handleRowClick = (row) => {
   // emit('row-click', row)
-   dialogStore.setCaseDetailDiaogOpen(true)
+
+  if(clickTimer.value) {
+    clearTimeout(clickTimer.value)
+  }
+
+  clickTimer.value = setTimeout(() => {
+    // dialogStore.setCaseDetailDiaogOpen(true)
+    console.log("btnClick" + row.objectId)
+    handleAllCasesPoints(true)
+    handleCase(false)
+    resultHighlight("allCase-points", row.objectId)
+  }, 300)
+}
+
+const handleRowDblClick = (row) => {
+  if(clickTimer.value) {
+    clearTimeout(clickTimer.value)
+  }
+
+  console.log("btnDblClick" + row.objectId)
+  handleAllCasesPoints(false)
+  handleCase(true)
 }
 
 // 按钮点击处理
@@ -161,6 +192,15 @@ const handleButtonClick = index => {
 const tableRowClassName = ({ row, rowIndex }) => {
   return rowIndex % 2 === 0 ? 'single-row' : 'double-row'
 }
+
+onMounted(() => {
+  handleAllCasesPoints(true)
+})
+
+onBeforeUnmount(() => {
+  handleAllCasesPoints(false)
+  handleCase(false)
+})
 </script>
 
 <style lang="scss" scoped>

+ 4 - 2
src/views/right/components/common/RightLegend.vue

@@ -104,15 +104,17 @@
 import { ref } from "vue";
 import { useCommonStore } from "@/store/common.js";
 import { useRightPanelStore } from "../../../../store/rightPanel";
+import {handleHeatMap} from "@/utils/map/baseMethod.js";
 
 const commonStore = useCommonStore();
 const rightPanelStore = useRightPanelStore();
 
-const bingliSwitch = ref(true);
-const videoSwitch = ref(true);
+const bingliSwitch = ref(false);
+const videoSwitch = ref(false);
 
 const handleBingli = () => {
   bingliSwitch.value = !bingliSwitch.value;
+  handleHeatMap(bingliSwitch.value)
 };
 
 const handleTimerSwitch = () => {