|
|
@@ -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 = "";
|
|
|
}
|