Explorar o código

feat:对接异常农事接口

wangsisi hai 2 semanas
pai
achega
61a67da68b

+ 48 - 15
src/views/old_mini/work_detail/index.vue

@@ -316,6 +316,32 @@ function readWorkAgronomyPayload() {
     }
 }
 
+function isAnormalWarningWorkType(workType) {
+    return workType === "anormal_warning";
+}
+
+function isWeatherWarningWorkType(workType) {
+    return workType === "weather_warning" || workType === "warning";
+}
+
+function resolveWorkCornerTip({ workType, rawStatus, isCompleted }) {
+    if (isCompleted) return "已完成";
+    if (isWeatherWarningWorkType(workType)) return "建议执行";
+    if (isAnormalWarningWorkType(workType) && Number(rawStatus) === 2) return "待巡园执行";
+    return "待执行";
+}
+
+function resolveWorkTypeFlags(workType, meta = {}) {
+    const isWeather = isWeatherWarningWorkType(workType);
+    const isAbnormal = meta.isAbnormal ?? isAnormalWarningWorkType(workType);
+    return {
+        isWeather: meta.isWeather ?? isWeather,
+        isAbnormal,
+        isNormal: meta.isNormal ?? (!isWeather && !isAbnormal),
+        isHighRisk: meta.isHighRisk ?? (isWeather || isAbnormal),
+    };
+}
+
 /** 列表带入:agronomy_detail 原样 + 列表上的类型/状态标签 */
 const methodTabs = ref([]);
 const executeMethod = ref("");
@@ -333,18 +359,22 @@ function applyGroupDetail(group, meta = farmMeta.value) {
     const detail = record?.agronomy_detail;
     if (!detail) return false;
     const workType = record.work_type ?? meta.work_type;
-    const isWeather = workType === "weather_warning" || workType === "warning";
+    const workStatus = record.work_status ?? meta.work_status;
+    const typeFlags = resolveWorkTypeFlags(workType, meta);
     farmData.value = {
         ...detail,
         work_id: record.work_id ?? detail.id,
         work_type: workType,
-        work_status: record.work_status ?? meta.work_status,
+        work_status: workStatus,
         status: meta.status,
-        isNormal: meta.isNormal ?? (!isWeather && workType === "standard"),
-        isAbnormal: meta.isAbnormal ?? false,
-        isWeather: meta.isWeather ?? isWeather,
-        isHighRisk: meta.isHighRisk ?? isWeather,
-        cornerTip: meta.cornerTip || "",
+        ...typeFlags,
+        cornerTip:
+            meta.cornerTip ||
+            resolveWorkCornerTip({
+                workType,
+                rawStatus: workStatus,
+                isCompleted: meta.status === "completed",
+            }),
     };
     return true;
 }
@@ -379,16 +409,19 @@ function applyAgronomyDetailPayload(payload) {
     methodTabs.value = tabs;
 
     const workType = payload.work_type;
-    const isWeather = workType === "weather_warning" || workType === "warning";
+    const typeFlags = resolveWorkTypeFlags(workType, payload);
     farmMeta.value = {
         work_type: workType,
         work_status: payload.work_status,
         status: payload.status,
-        isNormal: payload.isNormal ?? (!isWeather && workType === "standard"),
-        isAbnormal: payload.isAbnormal ?? false,
-        isWeather: payload.isWeather ?? isWeather,
-        isHighRisk: payload.isHighRisk ?? isWeather,
-        cornerTip: payload.cornerTip || "",
+        ...typeFlags,
+        cornerTip:
+            payload.cornerTip ||
+            resolveWorkCornerTip({
+                workType,
+                rawStatus: payload.work_status,
+                isCompleted: payload.status === "completed",
+            }),
         work_time: payload.work_time || "",
     };
     displayExecuteDate.value = formatExecuteDateLabel(
@@ -886,9 +919,9 @@ const areaMap = new AreaMap();
             gap: 9px;
 
             .status-title-text {
-                flex: 1;
+                flex: 0 1 auto;
                 min-width: 0;
-                line-height: 1.3;
+                line-height: 22px;
                 word-break: break-word;
             }
 

+ 30 - 8
src/views/old_mini/work_execute/index.vue

@@ -146,6 +146,28 @@ function formatWorkTime(workTime) {
     return formatExecuteDate(d);
 }
 
+function isAnormalWarningWorkType(workType) {
+    return workType === "anormal_warning";
+}
+
+function isWeatherWarningWorkType(workType) {
+    return workType === "weather_warning" || workType === "warning";
+}
+
+/** 异常农事 status=2 为待巡园执行,其余未完成态进待执行 */
+function resolveWorkCompleted(rawStatus, workType) {
+    const status = Number(rawStatus);
+    if (isAnormalWarningWorkType(workType)) return status === 1 || status === 6;
+    return status === 1;
+}
+
+function resolveWorkCornerTip({ workType, rawStatus, isCompleted }) {
+    if (isCompleted) return "已完成";
+    if (isWeatherWarningWorkType(workType)) return "建议执行";
+    if (isAnormalWarningWorkType(workType) && Number(rawStatus) === 2) return "待巡园执行";
+    return "待执行";
+}
+
 /**
  * 解析单条农事记录(默认第 0 组第 0 条)
  * 新结构:fw_type_groups[0].work_records[0]
@@ -188,20 +210,20 @@ function mapUserWorkToTask(item, index, centerWkt) {
     const title = baseName;
     const executeDate = formatWorkTime(record.work_time || item.work_time);
     const workType = record.work_type || item.work_type;
-    const isWarning = workType === "weather_warning" || workType === "warning";
-    // 接口约定:0 未完成,1 已完成(兼容拼写 work_stauts)
+    const isWarning = isWeatherWarningWorkType(workType);
+    const isAbnormal = isAnormalWarningWorkType(workType);
     const rawStatus = record.work_status ?? record.work_stauts ?? item.work_status ?? item.work_stauts;
-    const isCompleted = Number(rawStatus) === 1;
+    const isCompleted = resolveWorkCompleted(rawStatus, workType);
     return {
         id: record.work_id ?? item.work_id ?? detail.id ?? `work-${index}`,
         status: isCompleted ? "completed" : "pending",
         title,
         farmName: title,
-        isHighRisk: isWarning,
-        isNormal: !isWarning,
-        isAbnormal: false,
+        isHighRisk: isWarning || isAbnormal,
+        isNormal: !isWarning && !isAbnormal,
+        isAbnormal,
         isWeather: isWarning,
-        cornerTip: isCompleted ? "已完成" : isWarning ? "建议执行" : "待执行",
+        cornerTip: resolveWorkCornerTip({ workType, rawStatus, isCompleted }),
         analysisSummary: detail.fw_explain_simple || detail.fw_explain || "",
         areaCode: detail.crop_category_name || "分区一",
         executeDate,
@@ -214,7 +236,7 @@ function mapUserWorkToTask(item, index, centerWkt) {
         fwPrecrip: detail.fw_precrip,
         workType,
         workStatus: rawStatus,
-        agronomyType: isWarning ? "warning" : "standard",
+        agronomyType: isAbnormal ? "anormal" : isWarning ? "warning" : "standard",
         agronomy_detail: record.agronomy_detail || null,
         fwTypeGroups: Array.isArray(item?.fw_type_groups) ? item.fw_type_groups : null,
         wkt: hasCoord ? `POINT(${lng + dx} ${lat + dy})` : "",