From cbec4308b61d0147cd60abfcbbb90db24c4a8e7f Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 08 Apr 2025 15:22:29 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/TaskManage/TaskTop/TaskTime.vue                                              |    8 
 src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTrendAnalysis.vue      |  106 +++++++
 src/views/Home/EventOverviewDetail/EventOverviewDetail.vue                             |    9 
 src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue                        |  114 +++++++
 src/views/TaskManage/SearchBox.vue                                                     |   30 +
 src/views/TaskManage/TaskTop/TaskTotal.vue                                             |   11 
 src/components/CommonTitle.vue                                                         |    2 
 src/views/TaskManage/TaskTop/TaskTop.vue                                               |    9 
 src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue |   70 ++++
 src/components/CommonDateTime.vue                                                      |    2 
 src/views/TaskManage/TaskTop/TaskEvent.vue                                             |    8 
 src/views/TaskManage/TaskIntermediateContent/TaskTable.vue                             |   56 ++-
 src/views/TaskManage/components/TaskAlgorithmBusiness.vue                              |   11 
 src/views/Home/Home.vue                                                                |   61 ++-
 src/views/Home/HomeRight/EventOverview.vue                                             |   14 
 src/api/home/common.js                                                                 |    8 
 src/api/system/dictbiz.js                                                              |    7 
 src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTop5.vue               |   98 ++++++
 src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventDataAnalysis.vue       |  115 +++++++
 /dev/null                                                                              |   25 -
 src/store/modules/home.js                                                              |    4 
 src/views/TaskManage/TaskTop/TaskIndustry.vue                                          |    8 
 src/views/TaskManage/TaskIntermediateContent/AddTask.vue                               |   33 +
 src/views/TaskManage/TaskManage.vue                                                    |    6 
 src/api/home/event.js                                                                  |   47 +++
 src/views/TaskManage/TaskIntermediateContent/TaskIntermediateContent.vue               |    9 
 26 files changed, 738 insertions(+), 133 deletions(-)

diff --git a/src/api/home/common.js b/src/api/home/common.js
index 9a56796..0ebc986 100644
--- a/src/api/home/common.js
+++ b/src/api/home/common.js
@@ -1,13 +1,5 @@
 import request from '@/axios'
 
-// 字典查询 行业 算法 工单类型
-export const getDictionary = params => {
-	return request({
-		url: `/blade-system/dict-biz/listByCodes?codes=${params}`,
-		method: 'get',
-	})
-}
-
 // 区域
 export const deptsByAreaCode = params => {
 	return request({
diff --git a/src/api/home/event.js b/src/api/home/event.js
new file mode 100644
index 0000000..1f6a85a
--- /dev/null
+++ b/src/api/home/event.js
@@ -0,0 +1,47 @@
+import request from '@/axios'
+
+// 大屏首页=>行业数据分析(行业类型)
+export const getEventIndustryData = data => {
+	return request({
+		url: '/drone-device-core/jobEvent/industryData',
+		method: 'post',
+		data,
+	})
+}
+
+// 大屏首页=>事件趋势分析(事件日期数量折线)
+export const getEventTrend = data => {
+	return request({
+		url: '/drone-device-core/jobEvent/eventData',
+		method: 'post',
+		data,
+	})
+}
+
+// 大屏首页=>同类事件top5(事件数量)
+export const getEventTopFive = data => {
+	return request({
+		url: '/drone-device-core/jobEvent/topFive',
+		method: 'post',
+		data,
+	})
+}
+
+// 大屏首页=>事件分页列表
+export const getEventPage = data => {
+	return request({
+		url: '/drone-device-core/jobEvent/eventPage',
+		method: 'post',
+		data,
+	})
+}
+
+
+// 大屏首页=>事件状态数量
+export const getEventStatusNum = data => {
+	return request({
+		url: '/drone-device-core/jobEvent/eventStatusNum',
+		method: 'post',
+		data,
+	})
+}
diff --git a/src/api/system/dictbiz.js b/src/api/system/dictbiz.js
index 5488f55..2b00ea2 100644
--- a/src/api/system/dictbiz.js
+++ b/src/api/system/dictbiz.js
@@ -86,3 +86,10 @@
 		params,
 	})
 }
+// 多个字典查询
+export const getMultipleDictionary = params => {
+	return request({
+		url: `/blade-system/dict-biz/listByCodes?codes=${params}`,
+		method: 'get',
+	})
+}
diff --git a/src/components/CommonDateTime.vue b/src/components/CommonDateTime.vue
index 2cf3a06..07202e5 100644
--- a/src/components/CommonDateTime.vue
+++ b/src/components/CommonDateTime.vue
@@ -51,7 +51,7 @@
 };
 
 const change = value => {
-  // todo 我对接
+  // todo 待对接
   // emit('change', value);
 };
 
diff --git a/src/components/CommonTitle.vue b/src/components/CommonTitle.vue
index eef6d28..efe77c2 100644
--- a/src/components/CommonTitle.vue
+++ b/src/components/CommonTitle.vue
@@ -10,7 +10,7 @@
 const props = defineProps({
   title: {
     type: String,
-    default: '机巢概况',
+    default: '标题',
   },
   text: {
     type: String,
diff --git a/src/store/modules/home.js b/src/store/modules/home.js
index dede0d9..74a7360 100644
--- a/src/store/modules/home.js
+++ b/src/store/modules/home.js
@@ -5,6 +5,7 @@
   state: {
     machineNestDetail: false, // 机巢详情
     singleUavHome: {},
+		isEventOverviewDetail: false,//是事件概述详细信息
     singleTotal: {}, // 统计单个机巢数据
     // 项目id
     selectedWorkSpaceId: window.localStorage.getItem('bs_workspace_id'),
@@ -36,6 +37,9 @@
   },
   actions: {},
   mutations: {
+		setIsEventOverviewDetail: (state, data) => {
+			state.isEventOverviewDetail = data;
+		},
     setMachineNestDetail: (state, data) => {
       state.machineNestDetail = data;
     },
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetail.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetail.vue
new file mode 100644
index 0000000..35d24ed
--- /dev/null
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetail.vue
@@ -0,0 +1,9 @@
+<template>
+	<EventOverviewDetailLeft />
+	<EventOverviewDetailRight/>
+</template>
+<script setup>
+import EventOverviewDetailLeft from './EventOverviewDetailLeft/EventOverviewDetailLeft.vue'
+import EventOverviewDetailRight from '@/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue'
+</script>
+<style scoped lang="scss"></style>
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventDataAnalysis.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventDataAnalysis.vue
new file mode 100644
index 0000000..59aae22
--- /dev/null
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventDataAnalysis.vue
@@ -0,0 +1,115 @@
+<template>
+	<common-title title="行业数据分析" />
+	<div class="chart" ref="echartsRef"></div>
+</template>
+<script setup>
+import CommonTitle from '@/components/CommonTitle.vue'
+import { getEventIndustryData } from '@/api/home/event'
+import * as echarts from 'echarts'
+
+const echartsRef = ref(null)
+let chart = null
+
+const echartsOption = {
+	tooltip: {
+		trigger: 'axis',
+		axisPointer: {
+			type: 'shadow',
+		},
+	},
+	grid: {
+		top: '5%',
+		left: 0,
+		right: 0,
+		bottom: 0,
+		containLabel: true,
+	},
+	xAxis: {
+		type: 'category',
+		axisLabel: {
+			rotate: -45, // 旋转角度
+			interval: 0, // 显示所有标签
+			color: '#FFFFFF',
+			fontFamily: 'Source Han Sans CN, Source Han Sans CN',
+			fontWeight: 400,
+			fontSize: 10,
+		},
+		data: [],
+	},
+	yAxis: [
+		{
+			type: 'value',
+			axisLabel: {
+				interval: 0, // 显示所有标签
+				color: '#FFFFFF',
+				fontFamily: 'Source Han Sans CN, Source Han Sans CN',
+				fontWeight: 400,
+				fontSize: 10,
+			},
+			axisLine: {
+				lineStyle: {
+					color: '#ffffff',
+				},
+			},
+			splitLine: {
+				lineStyle: {
+					color: 'rgba(255, 255, 255, 0.1)',
+					type: 'dashed', // 设置为虚线
+				},
+			},
+		},
+	],
+	series: [],
+}
+
+const testObj = color => ({
+	type: 'bar',
+	emphasis: {
+		focus: 'series',
+	},
+	itemStyle: { color },
+	data: [],
+})
+
+const eventType = [
+	{ name: '事件', ...testObj('#6FCAFF') },
+	{ name: '任务', ...testObj('#8EFFAC') },
+]
+const params = inject('eventOverviewParams')
+
+watch(params, () => {
+	getData()
+})
+
+// 获取数据
+const getData = async () => {
+	const res = await getEventIndustryData(params.value)
+	const list = res?.data?.data || []
+	echartsOption.xAxis.data = list.map(item => item.name)
+	//
+	eventType.forEach(item => {
+		item.data = []
+	})
+	list.forEach(item => {
+		item.data.forEach(item1 => {
+			eventType.forEach(item2 => {
+				item2.name === item1.name && item2.data.push(item1.value)
+			})
+		})
+	})
+	echartsOption.series = eventType
+	chart.setOption(echartsOption)
+}
+
+onMounted(() => {
+	chart = echarts.init(echartsRef.value)
+	window.addEventListener('resize', chart.resize)
+	getData()
+})
+</script>
+<style scoped lang="scss">
+.chart {
+	width: 356px;
+	height: 190px;
+}
+</style>
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue
new file mode 100644
index 0000000..821a67e
--- /dev/null
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue
@@ -0,0 +1,70 @@
+<template>
+	<div class="left">
+		<div class="do-return" @click="goBack">
+			<img src="@/assets/images/signMachineNest/return.png" alt="" />
+		</div>
+		<common-title title="事件数据分析" />
+		<CommonDateTime class="dateTime" v-model="timeArr" @change="timeChange" />
+		<EventDataAnalysis />
+		<EventTrendAnalysis />
+		<EventTop5 />
+	</div>
+</template>
+<script setup>
+import EventDataAnalysis from './EventDataAnalysis.vue'
+import CommonTitle from '@/components/CommonTitle.vue'
+import CommonDateTime from '@/components/CommonDateTime.vue'
+import dayjs from 'dayjs'
+import { useStore } from 'vuex'
+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 store = useStore()
+
+const params = ref({
+	date_enum: 'TODAY',
+	end_date: undefined,
+	start_date: undefined,
+})
+provide('eventOverviewParams', params)
+
+// 时间变化
+const timeChange = (value, date_enum) => {
+	params.value = {
+		...params.value,
+		date_enum,
+	}
+}
+const goBack = () => {
+	store.commit('setIsEventOverviewDetail', false)
+}
+</script>
+<style scoped lang="scss">
+.left {
+	position: absolute;
+	top: 88px;
+	color: #e7f5ff;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+
+	.dateTime {
+		width: 356px;
+		margin: 0 0 8px 0;
+	}
+
+	.do-return {
+		position: absolute;
+		top: 50px;
+		right: -50px;
+		cursor: pointer;
+
+		img {
+			width: 40px;
+			height: 40px;
+		}
+	}
+}
+</style>
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTop5.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTop5.vue
new file mode 100644
index 0000000..692cb5d
--- /dev/null
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTop5.vue
@@ -0,0 +1,98 @@
+<template>
+	<common-title title="同类事件TOP5统计" />
+	<div class="chart" ref="echartsRef"></div>
+</template>
+<script setup>
+import CommonTitle from '@/components/CommonTitle.vue'
+import { getEventTopFive, getEventTrend } from '@/api/home/event'
+import * as echarts from 'echarts'
+
+const echartsRef = ref(null)
+let chart = null
+
+const echartsOption = {
+	tooltip: {
+		trigger: 'axis',
+		axisPointer: {
+			type: 'shadow',
+		},
+	},
+	grid: {
+		top: '5%',
+		left: 0,
+		right: 0,
+		bottom: 0,
+		containLabel: true,
+	},
+	xAxis: {
+		type: 'category',
+		axisLabel: {
+			rotate: -45, // 旋转角度
+			interval: 0, // 显示所有标签
+			color: '#FFFFFF',
+			fontFamily: 'Source Han Sans CN, Source Han Sans CN',
+			fontWeight: 400,
+			fontSize: 10,
+		},
+		data: [],
+	},
+	yAxis: [
+		{
+			type: 'value',
+			axisLabel: {
+				interval: 0, // 显示所有标签
+				color: '#FFFFFF',
+				fontFamily: 'Source Han Sans CN, Source Han Sans CN',
+				fontWeight: 400,
+				fontSize: 10,
+			},
+			axisLine: {
+				lineStyle: {
+					color: '#ffffff',
+				},
+			},
+			splitLine: {
+				lineStyle: {
+					color: 'rgba(255, 255, 255, 0.1)',
+					type: 'dashed', // 设置为虚线
+				},
+			},
+		},
+	],
+	series: {
+		type: 'bar',
+		emphasis: {
+			focus: 'series',
+		},
+		itemStyle: { color:'#6FCAFF' },
+		data: [],
+	},
+}
+
+const params = inject('eventOverviewParams')
+
+watch(params, () => {
+	getData()
+})
+
+// 获取数据
+const getData = async () => {
+	const res = await getEventTopFive(params.value)
+	const list = res?.data?.data || []
+	echartsOption.xAxis.data = list.map(item => item.name)
+	echartsOption.series.data = list.map(item => item.value)
+	chart.setOption(echartsOption)
+}
+
+onMounted(() => {
+	chart = echarts.init(echartsRef.value)
+	window.addEventListener('resize', chart.resize)
+	getData()
+})
+</script>
+<style scoped lang="scss">
+.chart {
+	width: 356px;
+	height: 190px;
+}
+</style>
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTrendAnalysis.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTrendAnalysis.vue
new file mode 100644
index 0000000..8faa9e5
--- /dev/null
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventTrendAnalysis.vue
@@ -0,0 +1,106 @@
+<template>
+	<common-title title="事件趋势分析" />
+	<div class="chart" ref="echartsRef"></div>
+</template>
+<script setup>
+import CommonTitle from '@/components/CommonTitle.vue'
+import { getEventTrend } from '@/api/home/event'
+import * as echarts from 'echarts'
+
+const echartsRef = ref(null)
+let chart = null
+
+const echartsOption = {
+	tooltip: {
+		trigger: 'axis',
+		axisPointer: {
+			type: 'shadow',
+		},
+	},
+	grid: {
+		top: '5%',
+		left: 0,
+		right: 0,
+		bottom: 0,
+		containLabel: true,
+	},
+	xAxis: {
+		type: 'category',
+		axisLabel: {
+			rotate: -45, // 旋转角度
+			interval: 0, // 显示所有标签
+			color: '#FFFFFF',
+			fontFamily: 'Source Han Sans CN, Source Han Sans CN',
+			fontWeight: 400,
+			fontSize: 10,
+		},
+		data: [],
+	},
+	yAxis: [
+		{
+			type: 'value',
+			axisLabel: {
+				interval: 0, // 显示所有标签
+				color: '#FFFFFF',
+				fontFamily: 'Source Han Sans CN, Source Han Sans CN',
+				fontWeight: 400,
+				fontSize: 10,
+			},
+			axisLine: {
+				lineStyle: {
+					color: '#ffffff',
+				},
+			},
+			splitLine: {
+				lineStyle: {
+					color: 'rgba(255, 255, 255, 0.1)',
+					type: 'dashed', // 设置为虚线
+				},
+			},
+		},
+	],
+	series: {
+		type: 'line',
+		itemStyle: {
+			color: '#0CEBF7', // 设置颜色
+		},
+		lineStyle: {
+			width: 2, // 线条宽度
+			type: 'solid', // 线条类型
+		},
+		symbol: 'circle', // 数据点符号
+		symbolSize: 6, // 数据点符号大小
+		emphasis: {
+			focus: 'series',
+		},
+		data: [], // 示例数据,根据实际完成率计算
+	},
+}
+
+const params = inject('eventOverviewParams')
+
+watch(params, () => {
+	getData()
+})
+
+// 获取数据
+const getData = async () => {
+	const res = await getEventTrend(params.value)
+	const list = res?.data?.data || []
+	echartsOption.xAxis.data = list.map(item => item.name)
+	echartsOption.series.data = list.map(item => item.value)
+	chart.setOption(echartsOption)
+}
+
+onMounted(() => {
+	chart = echarts.init(echartsRef.value)
+	window.addEventListener('resize', chart.resize)
+	getData()
+})
+</script>
+<style scoped lang="scss">
+.chart {
+	width: 356px;
+	height: 190px;
+}
+</style>
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue
new file mode 100644
index 0000000..ec8beda
--- /dev/null
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetailRight.vue
@@ -0,0 +1,114 @@
+<template>
+	<div class="right">
+		<div>工单列表</div>
+
+		<div>
+			<el-date-picker
+				v-model="timeArr"
+				type="daterange"
+				value-format="YYYY-MM-DD"
+				range-separator="-"
+				start-placeholder="开始日期"
+				end-placeholder="结束日期"
+				@change="change"
+				disabled
+			/>
+			<el-select v-model="params.device_sn" placeholder="请选择" size="large" filterable clearable>
+				<el-option
+					v-for="item in deviceList"
+					:label="item.nickname"
+					:value="item.device_sn"
+					:key="item.device_sn"
+				/>
+			</el-select>
+
+			<el-select
+				v-model="params.word_order_type"
+				placeholder="请选择"
+				size="large"
+				filterable
+				clearable
+			>
+				<el-option
+					v-for="item in workOrderType"
+					:label="item.dictValue"
+					:value="item.dictKey"
+					:key="item.dictKey"
+				/>
+			</el-select>
+			<div>
+				<div v-for="item in statusList">
+					<div>{{ item.name }}</div>
+					<div>{{ item.num || 0 }}</div>
+				</div>
+			</div>
+
+			<el-checkbox-group v-model="params.SFType">
+				<el-checkbox v-for="item in SFDictList" :label="item.dictValue":value="item.dictKey"  :key="item.dictKey"/>
+			</el-checkbox-group>
+
+		</div>
+	</div>
+</template>
+<script setup>
+import dayjs from 'dayjs'
+import { selectDevicePage } from '@/api/home/machineNest'
+import { getMultipleDictionary } from '@/api/system/dictbiz'
+import { getEventStatusNum } from '@/api/home/event'
+
+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 deviceList = ref([])
+
+const params = ref({
+	device_sn: '',
+	word_order_type: '',
+	SFType:[]
+})
+
+const getDeviceList = async () => {
+	const res = await selectDevicePage({ current: 1, size: 99999, type: 1 })
+	deviceList.value = res.data?.data?.records || []
+}
+
+const workOrderType = ref([])
+const SFDictList = ref([])
+const getDictList = () => {
+	getMultipleDictionary('WORK_ORDER_TYPE,SF').then(res => {
+		workOrderType.value = res.data.data?.['WORK_ORDER_TYPE'] || []
+		SFDictList.value = res.data.data?.['SF'] || []
+	})
+}
+
+const statusList = ref([])
+const getEventStatusNumFun = () => {
+	const [start_date, end_date] = timeArr.value
+	getEventStatusNum({ start_date, end_date }).then(res => {
+		statusList.value = res.data?.data || []
+	})
+}
+
+const change = value => {}
+
+onMounted(() => {
+	getDeviceList()
+	getDictList()
+	getEventStatusNumFun()
+})
+</script>
+<style scoped lang="scss">
+.right {
+	position: absolute;
+	right: 0;
+	top: 88px;
+	color: black;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	height: 900px;
+	width: 400px;
+	background: white;
+}
+</style>
diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue
index 90ae6c3..cb9d703 100644
--- a/src/views/Home/Home.vue
+++ b/src/views/Home/Home.vue
@@ -1,39 +1,44 @@
 <template>
-  <template v-if="!singleUavHome?.device_sn">
-    <SearchBox />
-    <HomeLeft />
-    <HomeRight />
-  </template>
-  <template v-else>
-    <SignMachineNest />
-  </template>
-  <RSide />
-  <Footer />
+	<template v-if="singleUavHome?.device_sn">
+		<SignMachineNest />
+	</template>
+	<template v-else>
+		<EventOverviewDetail v-if="isEventOverviewDetail" />
+		<template v-else>
+			<SearchBox />
+			<HomeLeft />
+			<HomeRight />
+		</template>
+	</template>
+	<RSide />
+	<Footer />
 </template>
 
 <script setup>
-import HomeRight from '@/views/Home/HomeRight/HomeRight.vue';
-import HomeLeft from '@/views/Home/HomeLeft/HomeLeft.vue';
-import SearchBox from '@/views/Home/SearchBox.vue';
-import SignMachineNest from '@/views/SignMachineNest/SignMachineNest.vue';
-import { useStore } from 'vuex';
-import Footer from '@/views/Home/Footer.vue';
-import RSide from '@/views/Home/RSide.vue';
-import { onMounted } from 'vue';
-import cesiumOperation from '@/utils/cesium-tsa';
-import MeasuringDistance from '@/components/MeasuringDistance.vue';
-const store = useStore();
-const { _init,viewerDestory } = cesiumOperation();
+import HomeRight from '@/views/Home/HomeRight/HomeRight.vue'
+import HomeLeft from '@/views/Home/HomeLeft/HomeLeft.vue'
+import SearchBox from '@/views/Home/SearchBox.vue'
+import SignMachineNest from '@/views/SignMachineNest/SignMachineNest.vue'
+import { useStore } from 'vuex'
+import Footer from '@/views/Home/Footer.vue'
+import RSide from '@/views/Home/RSide.vue'
+import { onMounted } from 'vue'
+import cesiumOperation from '@/utils/cesium-tsa'
+import EventOverviewDetail from '@/views/Home/EventOverviewDetail/EventOverviewDetail.vue'
 
-const singleUavHome = computed(() => store.state.home.singleUavHome);
+const store = useStore()
+const { _init, viewerDestory } = cesiumOperation()
 
-onUnmounted(()=>{
-  store.commit('setSingleUavHome',null);
+const singleUavHome = computed(() => store.state.home.singleUavHome)
+const isEventOverviewDetail = computed(() => store.state.home.isEventOverviewDetail)
+
+onUnmounted(() => {
+	store.commit('setSingleUavHome', null)
 	console.log('home销毁')
-  viewerDestory()
+	viewerDestory()
 })
 
 onMounted(() => {
-  _init('cesium');
-});
+	_init('cesium')
+})
 </script>
diff --git a/src/views/Home/HomeRight/EventOverview.vue b/src/views/Home/HomeRight/EventOverview.vue
index effefdf..d36ef27 100644
--- a/src/views/Home/HomeRight/EventOverview.vue
+++ b/src/views/Home/HomeRight/EventOverview.vue
@@ -1,5 +1,5 @@
 <template>
-  <CommonTitle title="事件概况" />
+  <CommonTitle title="事件概况" @Details="details"/>
   <div :style="{ marginLeft: pxToRem(14) }">
     <div class="eventOverview">
       <div class="overviewData">
@@ -63,6 +63,7 @@
 import { getJobEventBrokerLine, getJobEventByStatus, getJobEventTotal } from '@/api/home';
 import dayjs from 'dayjs';
 import { selectDevicePage } from '@/api/home/machineNest';
+import { useStore } from 'vuex'
 
 const echartsOption = {
   tooltip: {
@@ -175,6 +176,11 @@
   start_date: undefined,
 });
 
+const store = useStore()
+const details = () =>{
+   store.commit('setIsEventOverviewDetail',true)
+}
+
 // 远程查询
 const remoteMethod = nickname => {
   devicePageParams.value.nickname = nickname;
@@ -222,6 +228,8 @@
   getJobEventBrokerLine(params.value).then(res => {
     const list = res?.data?.data || [];
     echartsOption.xAxis.data = list.map(item => item.name);
+		// 赋值前清空数据
+		Object.keys(seriesObj).forEach(key => {seriesObj[key].data = []})
     list.forEach(item => {
       item.data.forEach((item1, index) => {
         seriesObj[item1.status].data.push(item1.value);
@@ -256,9 +264,7 @@
 
 onMounted(() => {
   chart = echarts.init(echartsRef.value);
-  window.addEventListener('resize', () => {
-    chart.resize();
-  });
+  window.addEventListener('resize',  chart.resize);
   getJobEventTotal().then(res => {
     eventTotal.value = res?.data?.data || 0;
   });
diff --git a/src/views/TaskManage/SearchBox.vue b/src/views/TaskManage/SearchBox.vue
index c96de38..a9eb886 100644
--- a/src/views/TaskManage/SearchBox.vue
+++ b/src/views/TaskManage/SearchBox.vue
@@ -53,7 +53,7 @@
           />
         </el-form-item>
         <el-form-item label="任务算法">
-          <!-- <el-select v-model="searchForm.ai_type" placeholder="请选择算法" clearable>
+          <!-- <el-select v-model="searchForm.ai_types" placeholder="请选择算法" clearable>
             <el-option v-for="item in taskAlgorithm" :key="item.id" :label="item.dictValue" :value="item.dictKey" />
           </el-select> -->
           <TaskAlgorithmBusiness :showAlgorithm="true" @algorithmChange="algorithmChange"/>
@@ -92,7 +92,7 @@
 
 const dateRange = ref([]);
 const searchForm = reactive({
-  ai_type: '', // 算法类型
+  ai_types: [], // 算法类型
   area_code: '', // 区域code
   create_dept: '', // 创建部门
   date_enum: '', // 日期枚举,可用值:TODAY,CURRENT_WEEK,CURRENT_MONTH,CURRENT_YEAR
@@ -117,8 +117,8 @@
 const handleSearch = () => {
   emit('search', {
     ...searchForm,
-    start_date: `${dateRange.value[0]} 00:00:00`,
-    end_date: `${dateRange.value[1]} 23:59:59`
+    start_date: dateRange.value.length ? `${dateRange.value[0]} 00:00:00` : '',
+    end_date: dateRange.value.length ? `${dateRange.value[1]} 23:59:59` : ''
   });
 };
 
@@ -149,7 +149,7 @@
 //   });
 // };
 const algorithmChange = (val) => {
-  searchForm.ai_type = val;
+  searchForm.ai_types = val;
 };
 
 const businessChange = (val) => {
@@ -200,10 +200,11 @@
 <style lang="scss" scoped>
 .search-box {
   position: absolute;
-  top: 120px;
-  left: 450px;
-  width: calc(100% - 400px - 400px - 100px);
+  top: 340px;
+  left: 40px;
+  width: calc(100% - 80px);
   height: 60px;
+  line-height: 60px;
   background: rgba(31, 62, 122, 0.95);
   // padding: 10px 20px;
   transition: all 0.3s;
@@ -212,7 +213,7 @@
   }
   .search-row {
     display: flex;
-    justify-content: space-between;
+    // justify-content: space-between;
     align-items: center;
     
     .search-items {
@@ -236,6 +237,7 @@
     z-index: 10;
     border-top: 1px solid rgba(255, 255, 255, 0.1);
     box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
+    margin-bottom: 60px; // 为分页预留空间
   }
 
   :deep(.el-form) {
@@ -273,5 +275,15 @@
         line-height: 18px;
       }
     }
+    :deep(.el-pagination) {
+      position: fixed;
+      bottom: 20px;
+      left: 50%;
+      transform: translateX(-50%);
+      background: rgba(31, 62, 122, 0.95);
+      padding: 15px 20px;
+      border-radius: 4px;
+      box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
+    }
 }
 </style>
\ No newline at end of file
diff --git a/src/views/TaskManage/TaskIntermediateContent/AddTask.vue b/src/views/TaskManage/TaskIntermediateContent/AddTask.vue
index a1c0060..9d23405 100644
--- a/src/views/TaskManage/TaskIntermediateContent/AddTask.vue
+++ b/src/views/TaskManage/TaskIntermediateContent/AddTask.vue
@@ -12,7 +12,7 @@
 			<div class="left">
 				<div class="search">
 					<div class="item">任务名称:<el-input v-model="searchForm.name" placeholder="请输入任务名称"></el-input></div>
-					<div class="item">任务日期:
+					<div class="item"><span style="color: red;">*</span>任务日期:
 						<el-date-picker
 							v-model="searchForm.begin_time"
 							format="YYYY-MM-DD"
@@ -66,6 +66,7 @@
 </template>
 
 <script setup>
+import { ElMessage } from 'element-plus';
 import { pxToRem } from '@/utils/rem';
 import { getWaylineList, createTask } from '@/api/home/task';
 import TaskAlgorithmBusiness from '../components/TaskAlgorithmBusiness.vue';
@@ -82,7 +83,7 @@
 
 const searchForm = reactive({
 	name: '',
-	ai_type: [],
+	ai_types: [],
 	file_id: '',
 	begin_time: '',
 	end_time: '',
@@ -102,7 +103,7 @@
   }
 };
 const algorithmChange = (val) => {
-  searchForm.ai_type = val;
+  searchForm.ai_types = val;
 };
 
 // 获取航线文件
@@ -118,12 +119,18 @@
 const emit = defineEmits(['refresh']);
 // 提交
 const submitClick = () => {
+	if (!searchForm.begin_time) {
+    ElMessage({
+      message: '请选择任务日期',
+      type: 'warning'
+    });
+    return;
+  }
 	searchForm.end_time = `${searchForm.begin_time} 23:59:59`;
 	searchForm.begin_time = `${searchForm.begin_time} 00:00:00`;
 	
 	createTask(searchForm).then((res) => {
-		console.log(res);
-		if (res.code === 0) {
+		if (res.data.code === 0) {
 			ElMessage.success('任务创建成功');
 			// 关闭当前窗口,刷新任务管理列表
 			isShowAddTask.value = false;
@@ -135,7 +142,7 @@
   isShowAddTask.value = false;
 	// 清除搜索数据
 	searchForm.name = '';
-  searchForm.ai_type = [];
+  searchForm.ai_types = [];
   searchForm.file_id = '';
   searchForm.begin_time = '';
   searchForm.end_time = '';
@@ -179,7 +186,7 @@
         :deep(.el-date-picker),
         :deep(.el-time-picker) {
           width: 240px;
-          margin-left: 10px;
+          // margin-left: 10px;
         }
 				:deep(.el-date-editor.el-input__wrapper) {
           width: 200px;  // 调整日期选择器宽度
@@ -189,6 +196,18 @@
 	}
 	.right {
 		width: 30%;
+		display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    
+    .btn {
+      margin-top: 20px;
+      text-align: center;
+      
+      .el-button {
+        margin: 0 10px;
+      }
+    }
 	}
 }
 </style>
diff --git a/src/views/TaskManage/TaskIntermediateContent/TaskIntermediateContent.vue b/src/views/TaskManage/TaskIntermediateContent/TaskIntermediateContent.vue
index 05beb46..f6b3f34 100644
--- a/src/views/TaskManage/TaskIntermediateContent/TaskIntermediateContent.vue
+++ b/src/views/TaskManage/TaskIntermediateContent/TaskIntermediateContent.vue
@@ -66,7 +66,6 @@
 };
 // 状态文字
 const getStatusText = (status) => {
-  console.log('哒哒哒',status)
   const statusMap = {
     1: '待执行',
     2: '执行中',  
@@ -128,10 +127,10 @@
 <style lang="scss" scoped>
 .task-intermediate-content {
   position: absolute;
-  top: 200px;
-  width: calc(100% - 400px - 400px - 100px);
-  left: 450px;
-  height: 760px;
+  top: 400px;
+  width: calc(100% - 80px);
+  left: 40px;
+  height: 500px;
   display: flex;
   flex-direction: column;
   justify-content: space-between;
diff --git a/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue b/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
index 26d834a..7b349c3 100644
--- a/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
+++ b/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
@@ -1,21 +1,23 @@
 <template>
-  <el-table :data="tableData" style="width: 100%" height="400" @selection-change="handleSelectionChange">
-    <el-table-column type="selection" width="55" />
-    <el-table-column type="index" label="序号" width="60" />
-    <el-table-column prop="nickname" label="机巢名称" />
-    <el-table-column prop="estimated_arrival_time" label="预计到达时间" />
-    <el-table-column prop="exe_distance" label="执行里程" />
-  </el-table>
-  <div class="pagination">
-    <el-pagination
-      v-model:current-page="pageParams.page"
-      v-model:page-size="pageParams.limit"
-      :page-sizes="[10, 20, 30]"
-      layout="total, sizes, prev, pager, next"
-      :total="total"
-      @size-change="handleSizeChange"
-      @current-change="handleCurrentChange"
-    />
+  <div class="table-container">
+    <el-table :data="tableData" style="width: 100%" height="400" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" />
+      <el-table-column type="index" label="序号" width="60" />
+      <el-table-column prop="nickname" label="机巢名称" />
+      <el-table-column prop="estimated_arrival_time" label="预计到达时间" />
+      <el-table-column prop="exe_distance" label="执行里程" />
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="pageParams.page"
+        v-model:page-size="pageParams.limit"
+        :page-sizes="[10, 20, 30]"
+        layout="total, sizes, prev, pager, next"
+        :total="total"
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+      />
+    </div>
   </div>
 </template>
 
@@ -48,7 +50,9 @@
 const getNestList = async () => {
 	tableData.value = [];
   const res = await getFlyingNestBy(pageParams);
+  
   if (res.data.code === 0) {
+    console.log(res.data.data, '哒哒哒');
     tableData.value = res.data.data;
   }
 };
@@ -83,4 +87,22 @@
 </script>
 
 <style lang="scss" scoped>
+.table-container {
+  height: 500px;
+  // display: flex;
+  // flex-direction: column;
+  
+  .pagination {
+    margin-top: 10px;
+  }
+  
+  // :deep(.el-table) {
+  //   flex: 1;
+  //   background-color: transparent;
+  //   --el-table-border-color: rgba(255, 255, 255, 0.1);
+  //   --el-table-header-bg-color: rgba(31, 62, 122, 0.5);
+  //   --el-table-header-text-color: #fff;
+  //   --el-table-text-color: #fff;
+  // }
+}
 </style>
\ No newline at end of file
diff --git a/src/views/TaskManage/TaskManage.vue b/src/views/TaskManage/TaskManage.vue
index 1416d8d..22fb1d0 100644
--- a/src/views/TaskManage/TaskManage.vue
+++ b/src/views/TaskManage/TaskManage.vue
@@ -1,13 +1,11 @@
 <script setup>
-import TaskLeft from "@/views/TaskManage/TaskLeft/TaskLeft.vue";
-import TaskRight from "@/views/TaskManage/TaskRight/TaskRight.vue";
+import TaskTop from "@/views/TaskManage/TaskTop/TaskTop.vue";
 import TaskIntermediateContent from "@/views/TaskManage/TaskIntermediateContent/TaskIntermediateContent.vue";
 </script>
 
 <template>
-  <TaskLeft/>
+  <TaskTop/>
   <TaskIntermediateContent />
-  <TaskRight/>
 </template>
 
 
diff --git a/src/views/TaskManage/TaskRight/TaskRight.vue b/src/views/TaskManage/TaskRight/TaskRight.vue
deleted file mode 100644
index 7a23af9..0000000
--- a/src/views/TaskManage/TaskRight/TaskRight.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-<template>
-  <div class="task-right">
-    <TaskTime />
-    <TaskEvent />
-  </div>
-</template>
-
-<script setup>
-import TaskTime from './TaskTime.vue';
-import TaskEvent from './TaskEvent.vue';
-</script>
-
-<style scoped lang="scss">
-.task-right {
-  position: absolute;
-  top: 122px;
-  right: 31px;
-  width: 404px;
-
-  .titleBox {
-    width: 404px;
-    height: 43px;
-  }
-}
-</style>
\ No newline at end of file
diff --git a/src/views/TaskManage/TaskRight/TaskEvent.vue b/src/views/TaskManage/TaskTop/TaskEvent.vue
similarity index 95%
rename from src/views/TaskManage/TaskRight/TaskEvent.vue
rename to src/views/TaskManage/TaskTop/TaskEvent.vue
index 5600ec3..349d1ab 100644
--- a/src/views/TaskManage/TaskRight/TaskEvent.vue
+++ b/src/views/TaskManage/TaskTop/TaskEvent.vue
@@ -1,6 +1,6 @@
 <!-- 任务事件统计 -->
 <template>
-  <common-title title="任务事件统计"></common-title>
+  <!-- <common-title title="任务事件统计"></common-title> -->
   <div class="task-event">
     <div class="chart" ref="chartRef"></div>
   </div>
@@ -130,10 +130,10 @@
 <style lang="scss" scoped>
 .task-event {
   font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
-  margin-left: 29px;
-  padding: 16px 16px;
+  // margin-left: 29px;
+  // padding: 16px 16px;
   width: 340px;
-  height: 400px;
+  height: 200px;
   background: linear-gradient(
     270deg,
     rgba(31, 62, 122, 0) 0%,
diff --git a/src/views/TaskManage/TaskLeft/TaskIndustry.vue b/src/views/TaskManage/TaskTop/TaskIndustry.vue
similarity index 94%
rename from src/views/TaskManage/TaskLeft/TaskIndustry.vue
rename to src/views/TaskManage/TaskTop/TaskIndustry.vue
index f8f895f..47968cf 100644
--- a/src/views/TaskManage/TaskLeft/TaskIndustry.vue
+++ b/src/views/TaskManage/TaskTop/TaskIndustry.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="task-industry">
     <div class="chart" ref="chartRef"></div>
   </div>
@@ -112,10 +112,10 @@
 <style lang="scss" scoped>
 .task-industry {
   font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
-  margin-left: 29px;
-  padding: 16px 16px;
+  // margin-left: 29px;
+  // padding: 16px 16px;
   width: 340px;
-  height: 400px;
+  height: 200px;
   background: linear-gradient(
     270deg,
     rgba(31, 62, 122, 0) 0%,
diff --git a/src/views/TaskManage/TaskRight/TaskTime.vue b/src/views/TaskManage/TaskTop/TaskTime.vue
similarity index 94%
rename from src/views/TaskManage/TaskRight/TaskTime.vue
rename to src/views/TaskManage/TaskTop/TaskTime.vue
index 48b9495..6de6d35 100644
--- a/src/views/TaskManage/TaskRight/TaskTime.vue
+++ b/src/views/TaskManage/TaskTop/TaskTime.vue
@@ -1,6 +1,6 @@
 <!-- 任务事件统计 -->
 <template>
-  <common-title title="任务时间统计"></common-title>
+  <!-- <common-title title="任务时间统计"></common-title> -->
   <div class="task-time">
     <div class="chart" ref="chartRef"></div>
   </div>
@@ -105,10 +105,10 @@
 <style lang="scss" scoped>
 .task-time {
   font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
-  margin-left: 29px;
-  padding: 16px 16px;
+  // margin-left: 29px;
+  // padding: 16px 16px;
   width: 340px;
-  height: 400px;
+  height: 200px;
   background: linear-gradient(
     270deg,
     rgba(31, 62, 122, 0) 0%,
diff --git a/src/views/TaskManage/TaskLeft/TaskLeft.vue b/src/views/TaskManage/TaskTop/TaskTop.vue
similarity index 60%
rename from src/views/TaskManage/TaskLeft/TaskLeft.vue
rename to src/views/TaskManage/TaskTop/TaskTop.vue
index f0117c5..b3c7374 100644
--- a/src/views/TaskManage/TaskLeft/TaskLeft.vue
+++ b/src/views/TaskManage/TaskTop/TaskTop.vue
@@ -2,18 +2,23 @@
   <div class="task-left">
     <TaskTotal />
     <TaskIndustry />
+    <TaskTime />
+    <TaskEvent />
   </div>
 </template>
 
 <script setup>
 import TaskTotal from './TaskTotal.vue';
 import TaskIndustry from './TaskIndustry.vue';
+import TaskTime from './TaskTime.vue';
+import TaskEvent from './TaskEvent.vue';
 </script>
 
 <style lang="scss" scoped>
 .task-left {
-  // width: 300px;
   position: relative;
-  top: 20px;
+  display: flex;
+  justify-content: space-between;
+  margin: 40px;
 }
 </style>
\ No newline at end of file
diff --git a/src/views/TaskManage/TaskLeft/TaskTotal.vue b/src/views/TaskManage/TaskTop/TaskTotal.vue
similarity index 92%
rename from src/views/TaskManage/TaskLeft/TaskTotal.vue
rename to src/views/TaskManage/TaskTop/TaskTotal.vue
index ad69663..5a5178c 100644
--- a/src/views/TaskManage/TaskLeft/TaskTotal.vue
+++ b/src/views/TaskManage/TaskTop/TaskTotal.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="task-total">
     <div class="card" v-for="item in list">
       <div>
@@ -53,10 +53,11 @@
 <style lang="scss" scoped>
 .task-total {
   font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
-  margin-left: 29px;
-  padding: 16px 16px;
+  // margin-left: 29px;
+  // padding: 16px 16px;
   width: 340px;
-  height: 400px;
+  height: 200px;
+  left: 40px;
   background: linear-gradient(
     270deg,
     rgba(31, 62, 122, 0) 0%,
@@ -69,7 +70,7 @@
   display: grid;
   grid-template-columns: repeat(2, 1fr);
   grid-template-rows: repeat(3, 1fr);
-  gap: 20px;
+  gap: 10px;
   padding: 20px;
   .card {
     /* position: absolute;
diff --git a/src/views/TaskManage/components/TaskAlgorithmBusiness.vue b/src/views/TaskManage/components/TaskAlgorithmBusiness.vue
index 5a773ac..8878c26 100644
--- a/src/views/TaskManage/components/TaskAlgorithmBusiness.vue
+++ b/src/views/TaskManage/components/TaskAlgorithmBusiness.vue
@@ -1,7 +1,7 @@
 <!-- 关联算法和综合业务 -->
 <template>
   <div class="task-algorithm" v-if="showAlgorithm">
-    <el-select v-model="ai_type" multiple collapse-tags collapse-tags-tooltip placeholder="请选择算法" clearable @change="handleAlgorithmChange">
+    <el-select v-model="ai_types" multiple collapse-tags collapse-tags-tooltip placeholder="请选择算法" clearable @change="handleAlgorithmChange">
       <el-option v-for="item in taskAlgorithm" :key="item.id" :label="item.dictValue" :value="item.dictKey" />
     </el-select>
   </div>
@@ -13,7 +13,8 @@
 </template>
 
 <script setup>
-import { getDictionary } from '@/api/home/common';
+
+import { getMultipleDictionary } from '@/api/system/dictbiz'
 
 // 接收父组件传参
 const props = defineProps({
@@ -28,7 +29,7 @@
 });
 
 // 算法
-let ai_type = ref('');
+let ai_types = ref('');
 let taskAlgorithm = ref([]);
 // 综合业务
 let industry_type = ref('');
@@ -36,7 +37,7 @@
 
 // 请求字典字段
 const requestDictionary = () => {
-  getDictionary('SF,HYLB').then((res) => {
+  getMultipleDictionary('SF,HYLB').then((res) => {
     if (res.code !== 0) {
       // 处理数据
       taskAlgorithm.value = res.data.data['SF'];
@@ -57,4 +58,4 @@
 onMounted(() => {
   requestDictionary();
 });
-</script>
\ No newline at end of file
+</script>

--
Gitblit v1.9.3