Ver Fonte

feat:对接互动弹窗回显接口

wangsisi há 14 horas atrás
pai
commit
4800dde3f8

+ 26 - 6
src/components/popup/interactPopup.vue

@@ -1,7 +1,7 @@
 <template>
     <popup class="interact-popup" v-model:show="show" closeable :close-on-click-overlay="false" @closed="handleClosed">
         <div class="interact-header">
-            <div class="interact-title">{{ currentData.farmWorkName }}</div>
+            <div class="interact-title">{{ currentData.farmWorkName || currentData.name }}</div>
         </div>
         <div class="interact-form">
             <div class="form-item">
@@ -119,13 +119,24 @@ const getPhenologyList = async (containerSpaceTimeId) => {
     }
 };
 
+const getFarmWorkArrangeDetail = async (id) => {
+    const { data, code } = await VE_API.farm.getFarmWorkArrangeDetail({ id });
+    if(code === 0) {
+        formData.value = {
+            phenologyId: data.phenologyId,
+            interactionTime: data.interactionTime,
+            interactionQuestion: data.interactionQuestion || "",
+        };
+    }
+};
+
 const currentData = ref(null);
 // 显示弹窗方法
 const showPopup = async (data) => {
     // 重置数据
     resetInteractData();
     await getPhenologyList(data.containerSpaceTimeId);
-
+    await getFarmWorkArrangeDetail(data.id);
     // 设置数据
     currentData.value = data;
 
@@ -152,10 +163,19 @@ const handleDeleteInteract = () => {
 };
 
 function formatDate(date) {
-    let year = date.getFullYear();
-    let month = String(date.getMonth() + 1).padStart(2, "0");
-    let day = String(date.getDate()).padStart(2, "0");
-    return `${year}-${month}-${day}`;
+    // 如果已经是字符串格式 YYYY-MM-DD,直接返回
+    if (typeof date === "string" && /^\d{4}-\d{2}-\d{2}$/.test(date)) {
+        return date;
+    }
+    // 如果是 Date 对象,进行转换
+    if (date instanceof Date) {
+        let year = date.getFullYear();
+        let month = String(date.getMonth() + 1).padStart(2, "0");
+        let day = String(date.getDate()).padStart(2, "0");
+        return `${year}-${month}-${day}`;
+    }
+    // 其他情况返回原值
+    return date;
 }
 
 const handleSaveInteract = () => {

+ 14 - 2
src/views/old_mini/create_farm/index.vue

@@ -344,6 +344,18 @@ const polygonArr = ref(null);
 const paramsType = ref(null);
 onActivated(() => {
     paramsType.value = route.query.type;
+    // 仅在携带 isReload 标记、且不是编辑/小程序回流场景时,认为是一次全新创建,重置表单和地块,
+    // 避免破坏原有自动生成农场名称等逻辑
+    if (route.query.isReload && paramsType.value !== "edit" && !route.query.miniJson) {
+        // 重置表单字段到初始值
+        ruleFormRef.value && ruleFormRef.value.resetFields();
+        // 重置与地块绘制相关的内部状态
+        polygonArr.value = null;
+        isFromEditMap.value = false;
+        hasDefaultPolygon.value = false;
+        // 清空上一次地块缓存
+        store.commit("home/SET_FARM_POLYGON", null);
+    }
     // 确保地图已初始化,使用 nextTick 等待 DOM 更新
     nextTick(() => {
         // 检查地图实例是否已初始化
@@ -534,11 +546,11 @@ const rules = reactive({
     name: [{ required: true, message: "请输入您的农场名称", trigger: ["blur", "change"] }],
     fzr: [{ required: true, message: "请输入联系人姓名", trigger: ["blur", "change"] }],
     tel: [
-        { required: true, message: "请输入联系人电话", trigger: ["blur", "change"] },
+        { required: true, message: "请输入联系人电话", trigger: ["blur"] },
         {
             pattern: /^1[3-9]\d{9}$/,
             message: "请输入正确的手机号码",
-            trigger: ["blur", "change"],
+            trigger: ["blur"],
         },
     ],
     defaultFarm: [{ required: true, message: "请选择是否为默认农场", trigger: "blur" }],

+ 1 - 16
src/views/old_mini/modify_work/modify.vue

@@ -553,7 +553,6 @@ onActivated(() => {
     isEdit.value = route.query.isEdit ? true : false;
     if (route.query.farmWorkId) {
         getDetail();
-        // getFarmWorkLibData();
     }
     window.scrollTo(0, 0);
     if (route.query.data) {
@@ -577,14 +576,6 @@ onActivated(() => {
     }));
 });
 
-const farmWorkLibData = ref({});
-const getFarmWorkLibData = async () => {
-    const { data, code } = await VE_API.farm.getFarmWorkArrangeDetail({ id: route.query.farmWorkId });
-    if(code === 0) {
-        farmWorkLibData.value = data || {};
-    }
-};
-
 const priceSheetPopupRef = ref(null);
 const showPriceSheetPopup = () => {
     priceSheetPopupRef.value.handleShowPopup(detailData.value);
@@ -962,13 +953,7 @@ const handleDeleteInteract = () => {
 const interactPopupRef = ref(null);
 const handleEditInteract = (item) => {
     if (interactPopupRef.value) {
-        interactPopupRef.value.showPopup({
-            arrangeIdVal: item.id,
-            interactTitleVal: item.farmWorkName || "梢期杀虫", // 使用农事名称作为标题
-            interactTimeVal: item.interactTime || "", // 如果有已保存的互动时间
-            forceTriggerTimeVal: item.forceTriggerTime || "", // 如果有已保存的强制触发时间
-            interactQuestionVal: item.interactQuestion, // 如果有已保存的互动问题
-        });
+        interactPopupRef.value.showPopup({...item, containerSpaceTimeId: route.query.containerSpaceTimeId,id:route.query.id});
     }
 };
 </script>

+ 1 - 1
src/views/old_mini/monitor/subPages/plan.vue

@@ -377,7 +377,7 @@ const handleRowClick = (item) => {
     curFarmObj.value = item;
     router.push({
         path: "/modify",
-        query: { farmWorkId: item.farmWorkId },
+        query: { id: item.id, farmWorkId: item.farmWorkId, containerSpaceTimeId: item.containerSpaceTimeId },
     });
 };
 

+ 2 - 1
src/views/old_mini/plan/index.vue

@@ -16,7 +16,7 @@
             <farm-work-plan-timeline
                 class="timeline-wrap"
                 pageType="plant"
-                :containerId="route.query.containerId"
+                :containerId="containerId"
                 :disableClick="true"
             />
         </div>
@@ -58,6 +58,7 @@ const handleTabChange = (id, item) => {
 };
 
 onActivated(() => {
+    containerId.value = route.query.containerId;
     getListMySchemes();
 });