|
@@ -1,7 +1,7 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="chart-list">
|
|
<div class="chart-list">
|
|
|
<div class="chart-item">
|
|
<div class="chart-item">
|
|
|
- <chart-box name="2025年广东省作物种植面积占比">
|
|
|
|
|
|
|
+ <chart-box :name="`${props.areaName}作物种植面积占比`">
|
|
|
<div class="box-content">
|
|
<div class="box-content">
|
|
|
<div class="chart-dom">
|
|
<div class="chart-dom">
|
|
|
<pie-chart :chartData="pieChartData" :totalArea="totalArea"></pie-chart>
|
|
<pie-chart :chartData="pieChartData" :totalArea="totalArea"></pie-chart>
|
|
@@ -70,7 +70,11 @@ const props = defineProps({
|
|
|
},
|
|
},
|
|
|
areaCode: {
|
|
areaCode: {
|
|
|
type: String,
|
|
type: String,
|
|
|
- default: null,
|
|
|
|
|
|
|
+ default: "156440000",
|
|
|
|
|
+ },
|
|
|
|
|
+ areaName: {
|
|
|
|
|
+ type: String,
|
|
|
|
|
+ default: "广东省",
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -123,32 +127,14 @@ const legendData = computed(() => {
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-const twoTitle = ref("2025年广东省作物区域占比");
|
|
|
|
|
-const threeTitle = ref("2025年广东省作物预估产量对比");
|
|
|
|
|
-
|
|
|
|
|
-onMounted(() => {
|
|
|
|
|
- fetchStatSpeciesAreaYield();
|
|
|
|
|
- fetchStatRegionAreaRatio();
|
|
|
|
|
- fetchAreaTrend();
|
|
|
|
|
-});
|
|
|
|
|
|
|
+const twoTitle = ref(`${props.areaName}作物区域占比`);
|
|
|
|
|
+const threeTitle = ref(`${props.areaName}作物预估产量对比`);
|
|
|
|
|
|
|
|
// 监听 activeBaseTab 变化
|
|
// 监听 activeBaseTab 变化
|
|
|
watch(
|
|
watch(
|
|
|
() => props.activeBaseTab,
|
|
() => props.activeBaseTab,
|
|
|
- (newVal) => {
|
|
|
|
|
- console.log(newVal);
|
|
|
|
|
- if (newVal === "物候期分布") {
|
|
|
|
|
- twoTitle.value = "2025年广东省小麦物候进程分布";
|
|
|
|
|
- threeTitle.value = "2025年广东省小麦物候进程分布";
|
|
|
|
|
- fetchStatPhenologyRatio();
|
|
|
|
|
- fetchStatRegionYieldRatio();
|
|
|
|
|
- }else{
|
|
|
|
|
- twoTitle.value = "2025年广东省作物区域占比";
|
|
|
|
|
- threeTitle.value = "2025年广东省作物预估产量对比";
|
|
|
|
|
- fetchStatSpeciesAreaYield();
|
|
|
|
|
- fetchStatRegionAreaRatio();
|
|
|
|
|
- fetchAreaTrend();
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ () => {
|
|
|
|
|
+ initData();
|
|
|
}
|
|
}
|
|
|
);
|
|
);
|
|
|
|
|
|
|
@@ -156,75 +142,85 @@ watch(
|
|
|
watch(
|
|
watch(
|
|
|
() => props.areaCode,
|
|
() => props.areaCode,
|
|
|
(newVal) => {
|
|
(newVal) => {
|
|
|
- if (props.activeBaseTab === "物候期分布" && newVal) {
|
|
|
|
|
- fetchStatPhenologyRatio();
|
|
|
|
|
- fetchStatRegionYieldRatio();
|
|
|
|
|
|
|
+ if (newVal) {
|
|
|
|
|
+ initData();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
|
|
+const initData = () => {
|
|
|
|
|
+ if (props.activeBaseTab === "物候期分布") {
|
|
|
|
|
+ twoTitle.value = `${props.areaName}小麦物候进程分布`;
|
|
|
|
|
+ threeTitle.value = `${props.areaName}小麦预告产量统计`;
|
|
|
|
|
+ fetchStatPhenologyRatio();
|
|
|
|
|
+ fetchStatRegionYieldRatio();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ twoTitle.value = `${props.areaName}作物区域占比`;
|
|
|
|
|
+ threeTitle.value = `${props.areaName}作物预估产量对比`;
|
|
|
|
|
+ fetchStatSpeciesAreaYield();
|
|
|
|
|
+ fetchStatRegionAreaRatio();
|
|
|
|
|
+ fetchAreaTrend();
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
//统计指定物种在下级区划中的预估产量占比
|
|
//统计指定物种在下级区划中的预估产量占比
|
|
|
const fetchStatRegionYieldRatio = () => {
|
|
const fetchStatRegionYieldRatio = () => {
|
|
|
- if (!props.areaCode) {
|
|
|
|
|
- yieldChartData.value = {
|
|
|
|
|
- categories: [],
|
|
|
|
|
- values: [],
|
|
|
|
|
- };
|
|
|
|
|
- yieldSummaryText.value = "暂无数据";
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
const params = {
|
|
const params = {
|
|
|
speciesId: 1,
|
|
speciesId: 1,
|
|
|
adminCode: props.areaCode,
|
|
adminCode: props.areaCode,
|
|
|
adminLevel: "province",
|
|
adminLevel: "province",
|
|
|
};
|
|
};
|
|
|
- VE_API.warning.fetchStatRegionYieldRatio(params).then((res) => {
|
|
|
|
|
- if (res.code === 0 && res.data && res.data.length > 0) {
|
|
|
|
|
- // 转换接口数据为图表格式
|
|
|
|
|
- const categories = res.data.map((item) => item.adminName);
|
|
|
|
|
- // 如果是物候期分布,使用 expectYield(但单位显示为亩),否则使用 expectYield(单位显示为吨)
|
|
|
|
|
- const values = res.data.map((item) => parseFloat(item.expectYield.toFixed(2)));
|
|
|
|
|
|
|
+ VE_API.warning
|
|
|
|
|
+ .fetchStatRegionYieldRatio(params)
|
|
|
|
|
+ .then((res) => {
|
|
|
|
|
+ if (res.code === 0 && res.data && res.data.length > 0) {
|
|
|
|
|
+ // 转换接口数据为图表格式
|
|
|
|
|
+ const categories = res.data.map((item) => item.adminName);
|
|
|
|
|
+ // 如果是物候期分布,使用 expectYield(但单位显示为亩),否则使用 expectYield(单位显示为吨)
|
|
|
|
|
+ const values = res.data.map((item) => parseFloat(item.expectYield.toFixed(2)));
|
|
|
|
|
+
|
|
|
|
|
+ // 更新图表数据
|
|
|
|
|
+ yieldChartData.value = {
|
|
|
|
|
+ categories,
|
|
|
|
|
+ values,
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
- // 更新图表数据
|
|
|
|
|
- yieldChartData.value = {
|
|
|
|
|
- categories,
|
|
|
|
|
- values,
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ // 找到最大值的区域
|
|
|
|
|
+ let maxValue = 0;
|
|
|
|
|
+ let maxRegion = "";
|
|
|
|
|
+ res.data.forEach((item) => {
|
|
|
|
|
+ if (item.expectYield > maxValue) {
|
|
|
|
|
+ maxValue = item.expectYield;
|
|
|
|
|
+ maxRegion = item.adminName;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
- // 找到最大值的区域
|
|
|
|
|
- let maxValue = 0;
|
|
|
|
|
- let maxRegion = "";
|
|
|
|
|
- res.data.forEach((item) => {
|
|
|
|
|
- if (item.expectYield > maxValue) {
|
|
|
|
|
- maxValue = item.expectYield;
|
|
|
|
|
- maxRegion = item.adminName;
|
|
|
|
|
|
|
+ // 更新摘要文字
|
|
|
|
|
+ if (maxRegion) {
|
|
|
|
|
+ const maxValueFormatted = maxValue.toFixed(1);
|
|
|
|
|
+ const unit = props.activeBaseTab === "物候期分布" ? "亩" : "吨";
|
|
|
|
|
+ yieldSummaryText.value = `${maxRegion}的${
|
|
|
|
|
+ props.activeBaseTab === "物候期分布" ? "种植面积" : "预估产量"
|
|
|
|
|
+ }最大,为${maxValueFormatted}${unit}`;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ yieldSummaryText.value = "暂无数据";
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- // 更新摘要文字
|
|
|
|
|
- if (maxRegion) {
|
|
|
|
|
- const maxValueFormatted = maxValue.toFixed(1);
|
|
|
|
|
- const unit = props.activeBaseTab === "物候期分布" ? "亩" : "吨";
|
|
|
|
|
- yieldSummaryText.value = `${maxRegion}的${props.activeBaseTab === "物候期分布" ? "种植面积" : "预估产量"}最大,为${maxValueFormatted}${unit}`;
|
|
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ yieldChartData.value = {
|
|
|
|
|
+ categories: [],
|
|
|
|
|
+ values: [],
|
|
|
|
|
+ };
|
|
|
yieldSummaryText.value = "暂无数据";
|
|
yieldSummaryText.value = "暂无数据";
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch((error) => {
|
|
|
|
|
+ console.error("获取区域产量占比数据失败:", error);
|
|
|
yieldChartData.value = {
|
|
yieldChartData.value = {
|
|
|
categories: [],
|
|
categories: [],
|
|
|
values: [],
|
|
values: [],
|
|
|
};
|
|
};
|
|
|
yieldSummaryText.value = "暂无数据";
|
|
yieldSummaryText.value = "暂无数据";
|
|
|
- }
|
|
|
|
|
- }).catch((error) => {
|
|
|
|
|
- console.error('获取区域产量占比数据失败:', error);
|
|
|
|
|
- yieldChartData.value = {
|
|
|
|
|
- categories: [],
|
|
|
|
|
- values: [],
|
|
|
|
|
- };
|
|
|
|
|
- yieldSummaryText.value = "暂无数据";
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ });
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
//统计指定物种在不同物候期下的面积占比
|
|
//统计指定物种在不同物候期下的面积占比
|
|
@@ -235,57 +231,60 @@ const fetchStatPhenologyRatio = () => {
|
|
|
adminLevel: "province",
|
|
adminLevel: "province",
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- VE_API.warning.fetchStatPhenologyRatio(params).then((res) => {
|
|
|
|
|
- if (res.code === 0 && res.data && res.data.length > 0) {
|
|
|
|
|
- console.log(res.data);
|
|
|
|
|
- // 转换接口数据为图表格式
|
|
|
|
|
- const categories = res.data.map((item) => item.phenologyName);
|
|
|
|
|
- const values = res.data.map((item) => parseFloat((item.areaRatio * 100).toFixed(2))); // 转换为百分比,保留两位小数
|
|
|
|
|
|
|
+ VE_API.warning
|
|
|
|
|
+ .fetchStatPhenologyRatio(params)
|
|
|
|
|
+ .then((res) => {
|
|
|
|
|
+ if (res.code === 0 && res.data && res.data.length > 0) {
|
|
|
|
|
+ console.log(res.data);
|
|
|
|
|
+ // 转换接口数据为图表格式
|
|
|
|
|
+ const categories = res.data.map((item) => item.phenologyName);
|
|
|
|
|
+ const values = res.data.map((item) => parseFloat((item.areaRatio * 100).toFixed(2))); // 转换为百分比,保留两位小数
|
|
|
|
|
+
|
|
|
|
|
+ // 更新图表数据
|
|
|
|
|
+ regionChartData.value = {
|
|
|
|
|
+ categories,
|
|
|
|
|
+ values,
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
- // 更新图表数据
|
|
|
|
|
- regionChartData.value = {
|
|
|
|
|
- categories,
|
|
|
|
|
- values,
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ // 找到最大占比的物候期
|
|
|
|
|
+ let maxRatio = 0;
|
|
|
|
|
+ let maxPhenology = "";
|
|
|
|
|
+ res.data.forEach((item) => {
|
|
|
|
|
+ if (item.areaRatio > maxRatio) {
|
|
|
|
|
+ maxRatio = item.areaRatio;
|
|
|
|
|
+ maxPhenology = item.phenologyName;
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
- // 找到最大占比的物候期
|
|
|
|
|
- let maxRatio = 0;
|
|
|
|
|
- let maxPhenology = "";
|
|
|
|
|
- res.data.forEach((item) => {
|
|
|
|
|
- if (item.areaRatio > maxRatio) {
|
|
|
|
|
- maxRatio = item.areaRatio;
|
|
|
|
|
- maxPhenology = item.phenologyName;
|
|
|
|
|
|
|
+ // 更新摘要文字
|
|
|
|
|
+ if (maxPhenology) {
|
|
|
|
|
+ const maxPercent = (maxRatio * 100).toFixed(1);
|
|
|
|
|
+ regionSummaryText.value = `${maxPhenology}的种植面积最大,占比${maxPercent}%`;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ regionSummaryText.value = "暂无数据";
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- // 更新摘要文字
|
|
|
|
|
- if (maxPhenology) {
|
|
|
|
|
- const maxPercent = (maxRatio * 100).toFixed(1);
|
|
|
|
|
- regionSummaryText.value = `${maxPhenology}的种植面积最大,占比${maxPercent}%`;
|
|
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ regionChartData.value = {
|
|
|
|
|
+ categories: [],
|
|
|
|
|
+ values: [],
|
|
|
|
|
+ };
|
|
|
regionSummaryText.value = "暂无数据";
|
|
regionSummaryText.value = "暂无数据";
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch((error) => {
|
|
|
|
|
+ console.error("获取物候期占比数据失败:", error);
|
|
|
regionChartData.value = {
|
|
regionChartData.value = {
|
|
|
categories: [],
|
|
categories: [],
|
|
|
values: [],
|
|
values: [],
|
|
|
};
|
|
};
|
|
|
regionSummaryText.value = "暂无数据";
|
|
regionSummaryText.value = "暂无数据";
|
|
|
- }
|
|
|
|
|
- }).catch((error) => {
|
|
|
|
|
- console.error('获取物候期占比数据失败:', error);
|
|
|
|
|
- regionChartData.value = {
|
|
|
|
|
- categories: [],
|
|
|
|
|
- values: [],
|
|
|
|
|
- };
|
|
|
|
|
- regionSummaryText.value = "暂无数据";
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ });
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const fetchAreaTrend = () => {
|
|
const fetchAreaTrend = () => {
|
|
|
const params = {
|
|
const params = {
|
|
|
speciesIds: [1, 222, 60876],
|
|
speciesIds: [1, 222, 60876],
|
|
|
- adminCode: "156440000",
|
|
|
|
|
|
|
+ adminCode: props.areaCode,
|
|
|
adminLevel: "province",
|
|
adminLevel: "province",
|
|
|
};
|
|
};
|
|
|
VE_API.warning.fetchAreaTrend(params).then((res) => {
|
|
VE_API.warning.fetchAreaTrend(params).then((res) => {
|
|
@@ -348,15 +347,28 @@ const fetchAreaTrend = () => {
|
|
|
xAxisData,
|
|
xAxisData,
|
|
|
series,
|
|
series,
|
|
|
};
|
|
};
|
|
|
|
|
+ } else {
|
|
|
|
|
+ console.log("空数据");
|
|
|
|
|
+ // 接口返回空数据时,清空图表数据
|
|
|
|
|
+ areaTrendChartData.value = {
|
|
|
|
|
+ xAxisData: [],
|
|
|
|
|
+ series: [],
|
|
|
|
|
+ };
|
|
|
}
|
|
}
|
|
|
|
|
+ }).catch(() => {
|
|
|
|
|
+ // 错误时也清空数据
|
|
|
|
|
+ areaTrendChartData.value = {
|
|
|
|
|
+ xAxisData: [],
|
|
|
|
|
+ series: [],
|
|
|
|
|
+ };
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const fetchStatRegionAreaRatio = () => {
|
|
const fetchStatRegionAreaRatio = () => {
|
|
|
const params = {
|
|
const params = {
|
|
|
- speciesId: 222,
|
|
|
|
|
- adminCode: 156441400,
|
|
|
|
|
- adminLevel: "city",
|
|
|
|
|
|
|
+ speciesId: "1",
|
|
|
|
|
+ adminCode: props.areaCode,
|
|
|
|
|
+ adminLevel: "",
|
|
|
};
|
|
};
|
|
|
VE_API.warning.fetchStatRegionAreaRatio(params).then((res) => {
|
|
VE_API.warning.fetchStatRegionAreaRatio(params).then((res) => {
|
|
|
if (res.code === 0 && res.data && res.data.length > 0) {
|
|
if (res.code === 0 && res.data && res.data.length > 0) {
|
|
@@ -388,15 +400,28 @@ const fetchStatRegionAreaRatio = () => {
|
|
|
regionSummaryText.value = "暂无数据";
|
|
regionSummaryText.value = "暂无数据";
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ // 接口返回空数据时,清空图表数据
|
|
|
|
|
+ regionChartData.value = {
|
|
|
|
|
+ categories: [],
|
|
|
|
|
+ values: [],
|
|
|
|
|
+ };
|
|
|
regionSummaryText.value = "暂无数据";
|
|
regionSummaryText.value = "暂无数据";
|
|
|
}
|
|
}
|
|
|
|
|
+ }).catch((error) => {
|
|
|
|
|
+ console.error("获取区域面积占比数据失败:", error);
|
|
|
|
|
+ // 错误时也清空数据
|
|
|
|
|
+ regionChartData.value = {
|
|
|
|
|
+ categories: [],
|
|
|
|
|
+ values: [],
|
|
|
|
|
+ };
|
|
|
|
|
+ regionSummaryText.value = "暂无数据";
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const fetchStatSpeciesAreaYield = () => {
|
|
const fetchStatSpeciesAreaYield = () => {
|
|
|
const params = {
|
|
const params = {
|
|
|
year: 2025,
|
|
year: 2025,
|
|
|
- adminCode: null,
|
|
|
|
|
|
|
+ adminCode: props.areaCode,
|
|
|
adminLevel: null,
|
|
adminLevel: null,
|
|
|
};
|
|
};
|
|
|
VE_API.warning.fetchStatSpeciesAreaYield(params).then((res) => {
|
|
VE_API.warning.fetchStatSpeciesAreaYield(params).then((res) => {
|
|
@@ -444,8 +469,25 @@ const fetchStatSpeciesAreaYield = () => {
|
|
|
yieldSummaryText.value = "暂无数据";
|
|
yieldSummaryText.value = "暂无数据";
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ // 接口返回空数据时,清空图表数据
|
|
|
|
|
+ pieChartData.value = [];
|
|
|
|
|
+ totalArea.value = 0;
|
|
|
|
|
+ yieldChartData.value = {
|
|
|
|
|
+ categories: [],
|
|
|
|
|
+ values: [],
|
|
|
|
|
+ };
|
|
|
yieldSummaryText.value = "暂无数据";
|
|
yieldSummaryText.value = "暂无数据";
|
|
|
}
|
|
}
|
|
|
|
|
+ }).catch((error) => {
|
|
|
|
|
+ console.error("获取作物面积产量数据失败:", error);
|
|
|
|
|
+ // 错误时也清空数据
|
|
|
|
|
+ pieChartData.value = [];
|
|
|
|
|
+ totalArea.value = 0;
|
|
|
|
|
+ yieldChartData.value = {
|
|
|
|
|
+ categories: [],
|
|
|
|
|
+ values: [],
|
|
|
|
|
+ };
|
|
|
|
|
+ yieldSummaryText.value = "暂无数据";
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
</script>
|
|
</script>
|