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 |  412 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 207 insertions(+), 205 deletions(-)

diff --git a/src/views/Home/components/HomeLeft/InspectionRaskDetails.vue b/src/views/Home/components/HomeLeft/InspectionRaskDetails.vue
index 7e649f8..d24f168 100644
--- a/src/views/Home/components/HomeLeft/InspectionRaskDetails.vue
+++ b/src/views/Home/components/HomeLeft/InspectionRaskDetails.vue
@@ -1,223 +1,225 @@
 <!-- 巡检任务详情 -->
 <template>
-  <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">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>
-    <CommonDateTime></CommonDateTime>
-    <div class="chart-container" ref="chartRef"></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 * as echarts from 'echarts';
-import { pxToRem } from '@/utils/rem';
-import CommonTitle from '@/components/CommonTitle.vue';
-import CommonDateTime from '@/components/CommonDateTime.vue';
+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');
-};
+	console.log('details')
+}
 
-const chartRef = ref(null);
+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(() => {
-  const chart = echarts.init(chartRef.value);
-  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',
-        '2',
-        '3',
-        '4',
-        '5',
-        '6',
-        '7',
-        '8',
-        '9',
-        '10',
-        '11',
-        '12',
-        '13',
-        '14',
-        '15',
-        '16',
-        '17',
-        '18',
-        '19',
-        '20',
-        '21',
-        '22',
-        '23',
-        '24',
-        '25',
-        '26',
-        '27',
-        '28',
-        '29',
-        '30',
-      ],
-      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, 15, 8, 20, 12, 18, 15, 22, 16, 19, 14, 17, 21, 13, 16, 18, 15, 20, 17, 22, 19, 16, 14,
-          18, 21, 15, 17, 20, 16, 18,
-        ],
-        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)' },
-          ]),
-        },
-      },
-    ],
-  };
-
-  chart.setOption(option);
-
-  // 监听窗口大小变化
-  window.addEventListener('resize', () => {
-    chart.resize();
-  });
-});
+	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: 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/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;
-      font-family: Source Han Sans CN, Source Han Sans CN;
-      line-height: 19px;
-      .value {
-        font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
-        margin-left: 8px;
-        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;
-  }
+	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>

--
Gitblit v1.9.3