From 828f2f412b36e03384d62874d3283f05afa7d4ea Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Tue, 15 Apr 2025 17:33:39 +0800
Subject: [PATCH] feat: 事件根据日期更新

---
 src/components/CommonDateTime.vue                                                      |   19 ++++++++-
 src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue                        |   30 ++++++++++++++-
 src/store/modules/home.js                                                              |   12 ++++++
 src/hooks/useMapAggregation/useMapAggregation.js                                       |   32 ++++++++++++++-
 src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue |   14 +++++--
 src/views/SignMachineNest/MachineLeft/InspectionRaskDetails.vue                        |    4 +-
 6 files changed, 98 insertions(+), 13 deletions(-)

diff --git a/src/components/CommonDateTime.vue b/src/components/CommonDateTime.vue
index 07202e5..393e9b7 100644
--- a/src/components/CommonDateTime.vue
+++ b/src/components/CommonDateTime.vue
@@ -25,8 +25,10 @@
 
 <script setup>
 import dayjs from 'dayjs';
+import { useStore } from 'vuex'
 import { ref, defineEmits } from 'vue';
 
+const store = useStore()
 const emit = defineEmits(['change']);
 
 const model = defineModel();
@@ -57,9 +59,22 @@
 
 let timeClick = (item,index) => {
   checked.value = item;
-  model.value = dateRanges[item];
-  emit('change', dateRanges[item],timeListEnum[index]);
+  const newDateRange = dateRanges[item];
+  store.commit('setEventTimeType', [checked.value, timeListEnum[index]]);
+  model.value = newDateRange;
+  emit('change', newDateRange, timeListEnum[index]);
 };
+onMounted(() => {
+  // 如果父组件传入了值,就使用父组件的值 by cpz
+  if (model.value && model.value.length === 2) {
+    // 根据传入的日期判断是哪个时间范围
+    const startDate = model.value[0];
+    const endDate = model.value[1];
+    if (startDate !== endDate) {
+      checked.value = 'week';
+    }
+  }
+});
 </script>
 
 <style scoped lang="scss">
diff --git a/src/hooks/useMapAggregation/useMapAggregation.js b/src/hooks/useMapAggregation/useMapAggregation.js
index 246ef47..df7750a 100644
--- a/src/hooks/useMapAggregation/useMapAggregation.js
+++ b/src/hooks/useMapAggregation/useMapAggregation.js
@@ -13,6 +13,7 @@
 import cesiumOperation from '@/utils/cesium-tsa'
 import { getDeviceRegion, getDeviceRegionCount, getEventDetails, getMapEvents } from '@/api/home/aggregation'
 import { PolyGradientMaterial } from '@/utils/cesium/Material'
+import { start } from 'nprogress'
 /**
  * 机巢聚合功能
  */
@@ -53,6 +54,8 @@
   const store = useStore()
   const userAreaCode = computed(() => store.state.user.userInfo.detail.areaCode)
   const selectedAreaCode = computed(() => store.state.user.selectedAreaCode)
+  let saveAreaCode = null;
+  let saveParams = { area_code: '',date_enum:'CURRENT_WEEK' };
 
 
   // 确定缩放比例
@@ -105,6 +108,7 @@
   // 事件散点
   let eventList = []
   function processChildren (childrens) {
+    // console.log(childrens, '事件点')
     return (childrens || []).map(item => {
       const arr = processChildren(item.childrens)
       if (item.data) {
@@ -118,13 +122,15 @@
       if (arr.length !== 0) {
         returnObj.childrens = arr
       }
+      console.log(returnObj, '111111')
       return returnObj
     })
   }
 
   // 获取事件聚合
-  function getMapEventCount (area_code) {
-    return getMapEvents({ area_code,date_enum:'CURRENT_WEEK' }).then(res => {
+  function getMapEventCount (params) {
+    console.log(5555555)
+    return getMapEvents(params).then(res => {
       const resData = res?.data?.data
       if (resData?.data) {
         eventList = resData?.data
@@ -163,7 +169,10 @@
   const initMapData = async areaCode => {
     eventList = []
     if (!areaCode) return
-    const list = type === 'device' ? await getDeviceCount(areaCode) : await getMapEventCount(areaCode)
+    saveAreaCode = areaCode;
+    saveParams.area_code = areaCode;
+    console.log(type, '444')
+    const list = type === 'device' ? await getDeviceCount(areaCode) : await getMapEventCount(saveParams)
     const splashedList = type === 'device'
       ? await getDeviceList(areaCode)
       : eventList.map(i => ({ eventId: i.id, latitude: Number(i.latitude), longitude: Number(i.longitude), type: 'event' }))
@@ -235,6 +244,23 @@
     { deep: true }
   )
 
+  // 监听 日 周 月 年
+  watch(() => store.state.home.eventTimeType, (newVal) => {
+    if (!saveAreaCode) return
+    if (newVal) {
+      saveParams = { area_code:saveAreaCode,date_enum: store.state.home.eventTimeParams }
+      initMapData(saveAreaCode);
+    }
+  });
+  // 监听事件右侧日期范围
+  watch(() => store.state.home.eventTimeRang, (newVal) => {
+    if (!saveAreaCode) return
+    if (newVal) {
+      saveParams = { area_code:saveAreaCode,start_date: newVal[0], end_date: newVal[1]}
+      initMapData(saveAreaCode);
+    }
+  });
+
   //散点机巢
   function splashed (row) {
     row.splashedList.forEach((item, index) => {
diff --git a/src/store/modules/home.js b/src/store/modules/home.js
index ee79c47..73618a3 100644
--- a/src/store/modules/home.js
+++ b/src/store/modules/home.js
@@ -14,6 +14,10 @@
     singleTotal: {}, // 统计单个机巢数据
     // 项目id
     selectedWorkSpaceId: window.localStorage.getItem('bs_workspace_id'),
+    // 事件 日 周 月 年
+    eventTimeType: 'day',
+    eventTimeParams: 'CURRENT_WEEK',
+    eventTimeRang: '',
     wsMessage: {},
     deviceState: {
       gatewayInfo: {},
@@ -113,6 +117,14 @@
 				dock.work_osd = info.host
 			}
 		},
+    setEventTimeType : (state, data) => {
+      console.log('33333')
+      state.eventTimeType = data[0]
+      state.eventTimeParams = data[1]
+    },
+    setEventTimeRang : (state, time) => {
+      state.eventTimeRang = time
+    },
 	},
 	getters: {
 		test(state) {
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue
index 1b6ba6d..276130c 100644
--- a/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue
@@ -23,12 +23,18 @@
 import EventTrendAnalysis from '@/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTrendAnalysis.vue'
 import EventTop5 from '@/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTop5.vue'
 
-const today = dayjs().format('YYYY-MM-DD')
-const timeArr = ref([today, today])
+// 选中机巢默认日
+// const today = dayjs().format('YYYY-MM-DD')
+// const timeArr = ref([today, today])
+// 选中事件默认为周
+const startOfWeek = dayjs().startOf('week').add(1, 'day').format('YYYY-MM-DD')
+const endOfWeek = dayjs().endOf('week').add(1, 'day').format('YYYY-MM-DD')
+const timeArr = ref([startOfWeek, endOfWeek])
+
 const store = useStore()
 
 const params = ref({
-	date_enum: 'TODAY',
+	date_enum: 'CURRENT_WEEK',
 	end_date: undefined,
 	start_date: undefined,
 })
@@ -65,7 +71,7 @@
 	align-items: center;
 
 	.dateTime {
-		width: 356px;
+		width: 400px;
 		margin: 0 0 8px 0;
 	}
 
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue
index 43638a5..edfc854 100644
--- a/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue
@@ -114,11 +114,17 @@
 import cesiumOperation from '@/utils/cesium-tsa'
 import CommonTitle from '@/components/CommonTitle.vue'
 import { pxToRem } from '@/utils/rem'
+import { useStore } from 'vuex'
 
+const store = useStore()
+// const eventTimeRange = computed(() => store.state.home.eventTimeRange)
 const timeFormat = 'YYYY-MM-DD HH:mm:ss'
 const today = dayjs().format(timeFormat)
-const oneWeekAgo = dayjs().subtract(7, 'day').format(timeFormat)
-const timeArr = ref([oneWeekAgo, today])
+// const oneWeekAgo = dayjs().subtract(7, 'day').format(timeFormat)
+// const timeArr = ref([oneWeekAgo, today])
+const startOfWeek = dayjs().startOf('week').add(1, 'day').format(timeFormat)
+const endOfWeek = dayjs().endOf('week').add(1, 'day').format(timeFormat)
+const timeArr = ref([startOfWeek, endOfWeek])
 const deviceList = ref([])
 
 const total = ref(0)
@@ -211,6 +217,8 @@
 	const [start_date, end_date] = timeArr.value
 	params.value.start_date = start_date
 	params.value.end_date = end_date
+	// 提交数据,更新聚合
+	store.commit('setEventTimeRang', timeArr.value);
 	// 重置
 	getEventStatusNumFun()
 	getEventList()
@@ -237,6 +245,24 @@
 	})
 }
 
+const getDateRange = unit => {
+  if (unit === 'today') {
+    return [dayjs().format('YYYY-MM-DD HH:mm:ss'), dayjs().format('YYYY-MM-DD HH:mm:ss')];
+  }
+  return [dayjs().startOf(unit).format('YYYY-MM-DD HH:mm:ss'), dayjs().endOf(unit).format('YYYY-MM-DD HH:mm:ss')];
+};
+
+// 监听事件时间范围变化
+watch(() => store.state.home.eventTimeType, (newVal) => {
+	timeArr.value = getDateRange(newVal);
+	const [start_date, end_date] = getDateRange(newVal);
+	params.value.start_date = start_date
+	params.value.end_date = end_date
+	getEventStatusNumFun()
+	getEventList()
+	getList()
+}, { immediate: false,deep: true })
+
 onMounted(() => {
 	getDeviceList()
 	getDictList()
diff --git a/src/views/SignMachineNest/MachineLeft/InspectionRaskDetails.vue b/src/views/SignMachineNest/MachineLeft/InspectionRaskDetails.vue
index 42e9381..98c6ac5 100644
--- a/src/views/SignMachineNest/MachineLeft/InspectionRaskDetails.vue
+++ b/src/views/SignMachineNest/MachineLeft/InspectionRaskDetails.vue
@@ -1,6 +1,6 @@
-<!-- 巡检任务数据 -->
+<!-- 任务事件概况 -->
 <template>
-    <common-title title="巡检任务详情" :style="{ marginLeft: pxToRem(14) }"></common-title>
+    <common-title title="任务事件概况" :style="{ marginLeft: pxToRem(14) }"></common-title>
     <div class="inspection-rask-details">
         <CommonDateTime :style="{ top: pxToRem(14),marginLeft: pxToRem(10) }" v-model="newTime" @change="getData"></CommonDateTime>
         <div class="chart-container" ref="chartRef"></div>

--
Gitblit v1.9.3