|
|
@@ -97,16 +97,16 @@ const menuIcon2 = require("@/assets/img/common/rain.png");
|
|
|
const stressMenuItems = [
|
|
|
{
|
|
|
key: "stress",
|
|
|
- line1: "暴雨",
|
|
|
- line2: "涝渍",
|
|
|
+ line1: "渍根",
|
|
|
+ line2: "风险",
|
|
|
icon: menuIcon,
|
|
|
mapUrl: require("@/assets/img/map/Flood_Waterlogging_Risk.png"),
|
|
|
extent: [115.7752805213905, 23.913245697921756, 116.55501818800624, 24.798086252779484],
|
|
|
},
|
|
|
{
|
|
|
key: "hot-drought-1",
|
|
|
- line1: "高温",
|
|
|
- line2: "高湿",
|
|
|
+ line1: "病害",
|
|
|
+ line2: "风险",
|
|
|
icon: menuIcon2,
|
|
|
mapUrl: require("@/assets/img/map/High_Humidity_Heat_Risk.png"),
|
|
|
extent: [115.77569718805717, 23.912588960529323, 116.55453653938879, 24.79742951538705],
|
|
|
@@ -232,6 +232,36 @@ function startCheckWeatherReport() {
|
|
|
pollWeatherReportGenerated();
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * risk_report / stress_report:
|
|
|
+ * 新:{ current_time, reports: [...] }
|
|
|
+ * 旧:data 为报告对象或数组
|
|
|
+ */
|
|
|
+function unwrapRiskStressData(raw) {
|
|
|
+ const res = Array.isArray(raw) ? raw[0] : raw;
|
|
|
+ if (Number(res?.code) !== 200 || !res.data) {
|
|
|
+ return { reports: [], currentTime: "" };
|
|
|
+ }
|
|
|
+ const data = res.data;
|
|
|
+ if (Array.isArray(data)) {
|
|
|
+ return { reports: data, currentTime: "" };
|
|
|
+ }
|
|
|
+ if (Array.isArray(data.reports)) {
|
|
|
+ return {
|
|
|
+ reports: data.reports,
|
|
|
+ currentTime: data.current_time || "",
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ reports: typeof data === "object" ? [data] : [],
|
|
|
+ currentTime: data.current_time || "",
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+function pickReportExplain(item) {
|
|
|
+ return item?.explain_simple || item?.interact_explain || "";
|
|
|
+}
|
|
|
+
|
|
|
/** 未来预警卡片:risk_report → explain_simple */
|
|
|
async function fetchRiskReport() {
|
|
|
const tel = resolveUserTel();
|
|
|
@@ -240,22 +270,16 @@ async function fetchRiskReport() {
|
|
|
return;
|
|
|
}
|
|
|
try {
|
|
|
- const raw = await VE_API.questionnaire.riskReport({ tel });
|
|
|
- const res = Array.isArray(raw) ? raw[0] : raw;
|
|
|
- if (Number(res?.code) !== 200 || !res.data) {
|
|
|
- weatherRiskExplain.value = "";
|
|
|
- return;
|
|
|
- }
|
|
|
- const data = res.data;
|
|
|
- const item = Array.isArray(data) ? data[0] : data;
|
|
|
- weatherRiskExplain.value =
|
|
|
- item?.explain_simple || item?.interact_explain || "";
|
|
|
+ const { reports } = unwrapRiskStressData(await VE_API.questionnaire.riskReport({ tel }));
|
|
|
+ const item = reports[0];
|
|
|
+ weatherRiskExplain.value = pickReportExplain(item);
|
|
|
+ if (item?.risk_name) weatherRisk.value = item.risk_name;
|
|
|
} catch {
|
|
|
weatherRiskExplain.value = "";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/** 当下胁迫卡片:stress_report → explain_simple;空数组则轮询是否生成中 */
|
|
|
+/** 当下胁迫卡片:stress_report → explain_simple;reports 为空则轮询是否生成中 */
|
|
|
async function fetchStressReport() {
|
|
|
const tel = resolveUserTel();
|
|
|
if (!tel) {
|
|
|
@@ -265,24 +289,17 @@ async function fetchStressReport() {
|
|
|
return;
|
|
|
}
|
|
|
try {
|
|
|
- const raw = await VE_API.questionnaire.stressReport({ tel });
|
|
|
- const res = Array.isArray(raw) ? raw[0] : raw;
|
|
|
- if (Number(res?.code) !== 200 || !res.data) {
|
|
|
- weatherStressExplain.value = "";
|
|
|
- return;
|
|
|
- }
|
|
|
- const data = res.data;
|
|
|
- // 报告尚未落库:空数组 → 查生成状态
|
|
|
- if (Array.isArray(data) && data.length === 0) {
|
|
|
+ const { reports } = unwrapRiskStressData(await VE_API.questionnaire.stressReport({ tel }));
|
|
|
+ if (!reports.length) {
|
|
|
weatherStressExplain.value = "";
|
|
|
startCheckWeatherReport();
|
|
|
return;
|
|
|
}
|
|
|
stopCheckWeatherReport();
|
|
|
reportGenerating.value = false;
|
|
|
- const item = Array.isArray(data) ? data[0] : data;
|
|
|
- weatherStressExplain.value =
|
|
|
- item?.explain_simple || item?.interact_explain || "";
|
|
|
+ const item = reports[0];
|
|
|
+ weatherStressExplain.value = pickReportExplain(item);
|
|
|
+ if (item?.stress_name) weatherStress.value = item.stress_name;
|
|
|
} catch {
|
|
|
weatherStressExplain.value = "";
|
|
|
}
|
|
|
@@ -291,16 +308,10 @@ async function fetchStressReport() {
|
|
|
/** 生成完成后只取正文,不再触发轮询 */
|
|
|
async function fetchStressReportAfterReady(tel) {
|
|
|
try {
|
|
|
- const raw = await VE_API.questionnaire.stressReport({ tel });
|
|
|
- const res = Array.isArray(raw) ? raw[0] : raw;
|
|
|
- if (Number(res?.code) !== 200 || !res.data) {
|
|
|
- weatherStressExplain.value = "";
|
|
|
- return;
|
|
|
- }
|
|
|
- const data = res.data;
|
|
|
- const item = Array.isArray(data) ? data[0] : data;
|
|
|
- weatherStressExplain.value =
|
|
|
- item?.explain_simple || item?.interact_explain || "";
|
|
|
+ const { reports } = unwrapRiskStressData(await VE_API.questionnaire.stressReport({ tel }));
|
|
|
+ const item = reports[0];
|
|
|
+ weatherStressExplain.value = pickReportExplain(item);
|
|
|
+ if (item?.stress_name) weatherStress.value = item.stress_name;
|
|
|
} catch {
|
|
|
weatherStressExplain.value = "";
|
|
|
}
|
|
|
@@ -583,6 +594,7 @@ onMounted(() => {
|
|
|
initMap();
|
|
|
tryOpenInviteEntryPopup();
|
|
|
fetchAbnormalContent();
|
|
|
+ handleSelectMenu('stress');
|
|
|
});
|
|
|
onActivated(() => {
|
|
|
syncEntryFarmData();
|