From 22980eac76e3beac8f5994b007c5329d5df4d1cf Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Mon, 14 Jul 2025 16:41:56 +0800
Subject: [PATCH] feat:任务成果

---
 src/views/wel/components/taskOutcome.vue |  137 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 133 insertions(+), 4 deletions(-)

diff --git a/src/views/wel/components/taskOutcome.vue b/src/views/wel/components/taskOutcome.vue
index 07809b7..422bfb3 100644
--- a/src/views/wel/components/taskOutcome.vue
+++ b/src/views/wel/components/taskOutcome.vue
@@ -19,20 +19,25 @@
         </div>
       </div>
     </div>
+   <div class="chart" ref="echartsRef"></div>
  </div>
 </template>
 
 <script setup >
-let checked = ref('CURRENT_YEAR');
+import { getdisposeApi} from '@/api/home/index';
+import * as echarts from 'echarts'
+import dayjs from 'dayjs'
+import useEchartsResize from '@/hooks/useEchartsResize'
+let checked = ref('YEAR');
 let timeListStr = ['本周', '本月', '本年'];
-let timeListEnum = ['CURRENT_WEEK', 'CURRENT_MONTH', 'CURRENT_YEAR'];
+let timeListEnum = ['WEEK', 'MONTH', 'YEAR'];
 const params = ref({
-  date_enum: 'CURRENT_YEAR',
+  date_enum: 'YEAR',
   device_sn: '',
   end_date: undefined,
   start_date: undefined,
 });
-const dateSelect = ref('CURRENT_YEAR');
+const dateSelect = ref('YEAR');
 
 let timeClick = (item, index) => {
   checked.value = item;
@@ -40,6 +45,124 @@
   dateSelect.value = item;
 
 };
+const echartsOption = {
+	tooltip: {
+		trigger: 'axis',
+		axisPointer: {
+			type: 'shadow',
+		},
+	
+	},
+	legend: {
+		itemWidth: 14,
+		itemHeight: 8,
+		data: ['待处理', '处理中', '已完成', '事件完成率'], // 确保包含所有系列名称
+		top: '-1%',
+		textStyle: {
+			color: '#383838',
+			fontSize: 12,
+		},
+	},
+	grid: {
+		// top: '5%',
+		left: 0,
+		right: 0,
+		bottom: 0,
+		containLabel: true,
+	},
+	xAxis: {
+		type: 'category',
+		axisLine: {
+			show: true, // 隐藏轴线
+		},
+		axisLabel: {
+			color: '#383838',
+			// interval: 0, // 显示所有标签
+		},
+		data: [],
+	},
+	yAxis: [
+		{
+			type: 'value',
+			name: '',
+			nameTextStyle: {
+				color: '#E6F7FF',
+				fontSize: '1rem',
+				padding: [-8, 0, 0, 0], // 调整单位文字位置,向左偏移
+				verticalAlign: 'top',
+				lineHeight: 12,
+			},
+			axisLabel: {
+				interval: 0, // 显示所有标签
+				color: '#383838',
+				fontFamily: 'Source Han Sans CN, Source Han Sans CN',
+				fontWeight: 400,
+				fontSize: 10,
+			},
+			axisLine: {
+				lineStyle: {
+					color: '#383838',
+				},
+			},
+			splitLine: {
+				lineStyle: {
+					color: '#9A9A9A',
+					type: 'dashed', // 设置为虚线
+				},
+			},
+		},
+	
+	],
+	series: [],
+}
+
+const eventTypeList = ref([
+	{ name: '待处理', value: 0, color: '#FF7411' },
+	{ name: '处理中', value: 0, color: '#FFFF61' },
+	{ name: '已完成', value: 0, color: '#06D957' },
+])
+const seriesObj = {}
+eventTypeList.value.forEach(item => {
+	seriesObj[item.name] = {
+		type: 'bar',
+		stack: 'Ad',
+		barWidth: 8,
+		emphasis: {
+			focus: 'series',
+		},
+		name: item.name,
+		itemStyle: { color: item.color },
+		data: [],
+	}
+})
+const echartsRef = ref(null)
+let { chart } = useEchartsResize(echartsRef)
+
+
+// 获取柱状图数据
+const getBarChartData = value => {
+	getdisposeApi(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) => {
+				if (!seriesObj?.[item1.name]) return
+				seriesObj[item1.name].data.push(item1.value)
+			})
+		})
+
+		echartsOption.series = Object.values(seriesObj)
+	
+		chart.value.setOption(echartsOption)
+	})
+}
+onMounted(() => {
+	getBarChartData(params.value)
+})
 </script>
 
 <style scoped lang="scss">
@@ -132,4 +255,10 @@
     border: 1px solid #1c5cff;
   }
 }
+.chart {
+		width: 98%;
+		height: 250px;
+		padding-left: 15px;
+		margin-top: 27px;
+	}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3