From 7635213630830c4cbb9ff6ada69ba9b5c8a35d42 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 03 Apr 2025 11:05:34 +0800
Subject: [PATCH] feat: 地图居中点调整

---
 src/views/Home/components/HomeLeft/InspectionRaskDetails.vue |  281 ++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 212 insertions(+), 69 deletions(-)

diff --git a/src/views/Home/components/HomeLeft/InspectionRaskDetails.vue b/src/views/Home/components/HomeLeft/InspectionRaskDetails.vue
index ff3dc53..d24f168 100644
--- a/src/views/Home/components/HomeLeft/InspectionRaskDetails.vue
+++ b/src/views/Home/components/HomeLeft/InspectionRaskDetails.vue
@@ -1,82 +1,225 @@
 <!-- 巡检任务详情 -->
 <template>
-    <div class="inspection-rask-details">
-        <div class="inspection-num">
-            <div class="total">
-                <div class="value">88</div>
-                <div class="name">总任务数</div>
-            </div>
-            <div class="status">
-               <div v-for="item in list">
-                    <div :style="{ color: item.color }" class="value">{{ item.value }}</div>
-                    <div class="name">{{ item.name }}</div>
-               </div>
-            </div>
-        </div>
-    </div>
+	<common-title title="巡检任务情况" :style="{ marginLeft: pxToRem(14) }" @details="detailsFun">
+	</common-title>
+	<div class="inspection-rask-details">
+		<div class="inspection-num">
+			<div class="total">
+				<div class="value">{{ total }}</div>
+				<div class="name">总任务数</div>
+			</div>
+			<div class="status">
+				<div v-for="item in list">
+					<div :style="{ color: item.color }" class="value">
+						{{ jobStatistics[item.field] }}
+					</div>
+					<div class="name">{{ item.name }}</div>
+				</div>
+			</div>
+		</div>
+		<CommonDateTime :style="{ top: pxToRem(19) }" v-model="newTime" @change="getData" />
+		<div class="chart-container" ref="chartRef"></div>
+	</div>
 </template>
 
 <script setup>
-import { hToV, wToR } from '@/utils/pxConver';
+import * as echarts from 'echarts'
+import { pxToRem } from '@/utils/rem'
+import CommonTitle from '@/components/CommonTitle.vue'
+import CommonDateTime from '@/components/CommonDateTime.vue'
+import { getJobNumBar, getJobStatistics, getTotalJobNum } from '@/api/home'
+import dayjs from 'dayjs'
 
+const currenDate = dayjs().format('YYYY-MM-DD')
+const newTime = ref([currenDate, currenDate])
 const list = ref([
-  { name: '计划执行', value: 89, color: '#FFFFFF' },
-  { name: '执行中', value: 100, color: '#FFA768' },
-  { name: '待执行', value: 66, color: '#FFE17E' },
-  { name: '已执行', value: 10, color: '#8EFFAC' },
-  { name: '执行失败', value: 10, color: '#FF8E8E' },
-]);
+	{ name: '计划执行', value: 89, color: '#FFFFFF', field: 'planned_executions' },
+	{ name: '执行中', value: 100, color: '#FFA768', field: 'running_num' },
+	{ name: '待执行', value: 66, color: '#FFE17E', field: 'pending_executions' },
+	{ name: '已执行', value: 10, color: '#8EFFAC', field: 'executed' },
+	{ name: '执行失败', value: 10, color: '#FF8E8E', field: 'failed_executions' },
+])
+const option = {
+	grid: {
+		top: '15%',
+		left: '3%',
+		right: '4%',
+		bottom: '3%',
+		containLabel: true,
+	},
+	tooltip: {
+		trigger: 'axis',
+		backgroundColor: 'rgba(0,0,0,0.7)',
+		borderColor: '#0070FF',
+		borderWidth: 1,
+		textStyle: {
+			color: '#fff',
+		},
+		formatter: '{b}: {c}次',
+	},
+	xAxis: {
+		type: 'category',
+		data: ['1'],
+		axisLine: {
+			show: false, // 隐藏轴线
+		},
+		axisTick: {
+			show: true,
+			length: 2,
+			lineStyle: {
+				color: '#ffffff',
+			},
+		},
+		axisLabel: {
+			color: '#ffffff',
+			margin: 8,
+		},
+	},
+	yAxis: {
+		type: 'value',
+		axisLine: {
+			lineStyle: {
+				color: '#ffffff',
+			},
+		},
+		axisLabel: {
+			color: '#ffffff',
+		},
+		splitLine: {
+			lineStyle: {
+				color: 'rgba(255, 255, 255, 0.1)',
+			},
+		},
+	},
+	series: {
+		data: [10],
+		type: 'bar',
+		barWidth: '60%',
+		itemStyle: {
+			color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+				{ offset: 0, color: '#1EE7E7' },
+				{ offset: 1, color: 'rgba(0, 112, 255, 0.1)' },
+			]),
+		},
+	},
+}
 
+const detailsFun = () => {
+	console.log('details')
+}
+
+let chart = null
+
+// TODAY,CURRENT_WEEK,CURRENT_MONTH,CURRENT_YEAR
+const getData = (value, date_enum) => {
+	const params = {
+		date_enum,
+		// start_date: newTime.value[0],
+		// end_date: newTime.value[1]
+	}
+	getJobStatistics(params).then(res => {
+		jobStatistics.value = res.data?.data || {}
+	})
+	getJobNumBar(params).then(res => {
+		option.xAxis.data = res.data?.data.map(item => item.name)
+		option.series.data = res.data?.data.map(item => item.value)
+		chart.setOption(option)
+	})
+}
+
+const chartRef = ref(null)
+const total = ref(0)
+const jobStatistics = ref({
+	planned_executions: 0,
+	executed: 0,
+	running_num: 0,
+	failed_executions: 0,
+	pending_executions: 0,
+})
+
+onMounted(() => {
+	chart = echarts.init(chartRef.value)
+	// 监听窗口大小变化
+	window.addEventListener('resize', () => {
+		chart.resize()
+	})
+	getTotalJobNum().then(res => {
+		total.value = res.data?.data || 0
+	})
+	getData(newTime.value, 'TODAY')
+})
 </script>
 
 <style scoped lang="scss">
 .inspection-rask-details {
-    margin-left: 29px;
-    padding: hToV(16) 16px;
-    width: 390px;
-    height: hToV(414);
-    background: linear-gradient( 270deg, rgba(31,62,122,0) 0%, rgba(31,62,122,0.35) 21%, #1F3E7A 100%);
-    border-radius: 0px 0px 0px 0px;
-    opacity: 0.85;
-    .inspection-num {
-        background: url('@/assets/images/inspection-num.png') no-repeat center / 100% 100%;
-        width: 360px;
-        height: hToV(118);
-        position: relative;
-        .total {
-            position: absolute;
-            left: 34px;
-            top: hToV(34);
-            font-weight: 500;
-            font-size: 14px;
-            color: #FFFFFF;
-            .value {
-                margin-left: 8px;
-                font-size: 26px;
-            }
-        }
-        .status {
-            position: absolute;
-            top: hToV(8);
-            right: 10px;
-            width: 200px;
-            display: flex;
-            flex-wrap: wrap;
-            gap: 8px;
-            justify-content: flex-start;
-            line-height: hToV(22);
-            padding: 0 10px 10px 0;
-            .name {
-                font-weight: 400;
-                font-size: 14px;
-                color: #FFFFFF;
-            }
-            .value {
-                font-family: Source Han Sans CN, Source Han Sans CN;
-                font-weight: 400;
-                font-size: 26px;
-            }
-        }
-    }
+	margin-left: 29px;
+	padding: 16px 16px;
+	width: 390px;
+	height: 414px;
+	background: linear-gradient(
+		270deg,
+		rgba(31, 62, 122, 0) 0%,
+		rgba(31, 62, 122, 0.35) 21%,
+		#1f3e7a 100%
+	);
+	border-radius: 0px 0px 0px 0px;
+	opacity: 0.85;
+
+	.inspection-num {
+		background: url('@/assets/images/home/homeLeft/inspection-num.png') no-repeat center / 100%
+			100%;
+		width: 360px;
+		height: 118px;
+		position: relative;
+
+		.total {
+			position: absolute;
+			left: 34px;
+			top: 44px;
+			font-weight: 500;
+			font-size: 14px;
+			color: #ffffff;
+			text-align: center;
+			font-family: Source Han Sans CN, Source Han Sans CN;
+			line-height: 19px;
+
+			.value {
+				font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
+				font-size: 26px;
+			}
+		}
+
+		.status {
+			position: absolute;
+			top: 8px;
+			right: 10px;
+			width: 200px;
+			display: flex;
+			flex-wrap: wrap;
+			gap: 8px;
+			justify-content: flex-start;
+			line-height: 22px;
+			padding: 0 10px 10px 0;
+
+			.name {
+				font-family: Source Han Sans CN, Source Han Sans CN;
+				font-weight: 400;
+				font-size: 14px;
+				color: #ffffff;
+			}
+
+			.value {
+				font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
+				font-weight: 400;
+				font-size: 26px;
+			}
+		}
+	}
+
+	.chart-container {
+		width: 100%;
+		height: 200px;
+		margin-top: 20px;
+	}
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3