Jelajahi Sumber

feat:对接互动接口和农情档案接口

wangsisi 1 Minggu lalu
induk
melakukan
1382b05409

+ 1 - 1
src/components/gardenList.vue

@@ -167,7 +167,7 @@ function normalizeFarmList(data) {
 function getFarmList() {
     VE_API.farm.getFarmList().then(({ data }) => {
         const fullData = normalizeFarmList(data);
-        gardenList.value = fullData.filter(item => item.farm_variety == 1);
+        gardenList.value = fullData;
         if (!fullData.length) {
             emit("loaded", { hasFarm: false });
             emit("selectGarden", { farm_id: null, farm_name: "", geom_wkt: "", defaultOption: false });

+ 6 - 0
src/i18n/messages.js

@@ -116,6 +116,8 @@ export default {
             legendZone: "管理分区",
             legendGrowth: "长势异常",
             legendPest: "病虫害异常",
+            loading: "加载中...",
+            noRecord: "暂无记录",
             tabPhenology: "物候记录",
             tabAbnormal: "异常记录",
             tabFarming: "农事记录",
@@ -136,6 +138,7 @@ export default {
         agriRecord: {
             farmDetail: "农场详情",
             level2: "二级",
+            riskLevel: "{level}级",
             pendingRecord: "待记录",
             growthWorkName: "长势异常态势跟踪",
             growthReason: "缺锌导致生长缓慢",
@@ -283,6 +286,8 @@ export default {
             legendZone: "Management Zone",
             legendGrowth: "Growth Abnormality",
             legendPest: "Pest & Disease",
+            loading: "Loading...",
+            noRecord: "No records",
             tabPhenology: "Phenology",
             tabAbnormal: "Abnormalities",
             tabFarming: "Farm Work",
@@ -303,6 +308,7 @@ export default {
         agriRecord: {
             farmDetail: "Farm Details",
             level2: "Level 2",
+            riskLevel: "Level {level}",
             pendingRecord: "Pending",
             growthWorkName: "Growth Abnormality Tracking",
             growthReason: "Slow growth due to zinc deficiency",

+ 39 - 61
src/views/old_mini/agri_file/components/fileFloat.vue

@@ -12,9 +12,9 @@
             </div>
 
             <div class="tab-content-group" v-show="height !== anchors[0]">
-                <!-- <div class="tab-loading" v-if="isCurrentTabLoading">{{ t('加载中...') }}</div>
-                <div class="tab-empty" v-else-if="currentList.length === 0">{{ t('暂无记录') }}</div> -->
-                <div class="tab-content-item" v-for="item in displayList" :key="item.id">
+                <div class="tab-loading" v-if="loading">{{ t('agriFile.loading') }}</div>
+                <div class="tab-empty" v-else-if="currentList.length === 0">{{ t('agriFile.noRecord') }}</div>
+                <div v-else class="tab-content-item" v-for="item in displayList" :key="item.id">
                     <div class="time-tag">{{ item.time }}</div>
                     <div class="item-info">
                         {{ item.recordText }}
@@ -30,10 +30,26 @@
 import { useI18n } from "@/i18n";
 import { RECORD_KEY_MAP } from "@/i18n/recordTextMap";
 import { FloatingPanel } from 'vant';
-import { computed, ref, onMounted, watch } from 'vue';
+import { computed, ref, watch } from 'vue';
+
+const { t } = useI18n();
+
+const props = defineProps({
+    farmRecordData: {
+        type: Object,
+        default: () => ({}),
+    },
+    activeTab: {
+        type: Number,
+        default: 0,
+    },
+    loading: {
+        type: Boolean,
+        default: false,
+    },
+});
 
-const { t, locale } = useI18n();
-const emit = defineEmits(['map-farm-record']);
+const emit = defineEmits(["update:activeTab"]);
 
 const anchors = [
     130,
@@ -49,8 +65,7 @@ const floatTabLabels = computed(() => [
 ]);
 
 const currentList = ref([]);
-const activeTab = ref(0);
-const activeTabValue = computed(() => floatTabLabels.value[activeTab.value]?.value || "phenology");
+const activeTabValue = computed(() => floatTabLabels.value[props.activeTab]?.value || "phenology");
 
 const displayList = computed(() =>
     currentList.value.map((item) => ({
@@ -60,68 +75,31 @@ const displayList = computed(() =>
     }))
 );
 
-const syncMapFarmRecord = () => {
-    emit("map-farm-record", {
-        polygonWkt: mapPolygonData.value,
-        records: displayList.value,
-    });
+const syncCurrentList = () => {
+    const tabValue = floatTabLabels.value[props.activeTab]?.value;
+    currentList.value = props.farmRecordData?.[tabValue] || [];
 };
 
 const changeTab = (item, index) => {
-    activeTab.value = index;
-    currentList.value = farmRecordData.value?.[item.value] || [];
-    syncMapFarmRecord();
+    emit("update:activeTab", index);
+    currentList.value = props.farmRecordData?.[item.value] || [];
 };
 
 const activeBgStyle = computed(() => ({
-    transform: `translateX(${activeTab.value * 100}%)`,
+    transform: `translateX(${props.activeTab * 100}%)`,
 }));
 
-watch(locale, () => {
-    syncMapFarmRecord();
-});
+watch(
+    () => props.farmRecordData,
+    () => {
+        syncCurrentList();
+    },
+    { deep: true, immediate: true }
+);
 
-onMounted(() => {
-    getFarmRecord();
+watch(() => props.activeTab, () => {
+    syncCurrentList();
 });
-
-const mapPolygonData = ref("");
-const farmRecordData = ref({});
-const getFarmRecord = async () => {
-    const res = {
-        code: 200,
-        data: {
-            abnormal: [
-                { id: 2, ratio: "5", record: "果园出现蒂蛀虫为害果,占比", time: "05-12" },
-                { id: 3, ratio: "8", record: "果园出现缺钙裂果症状,占比", time: "05-12" },
-                { id: 4, ratio: "", record: "果园出现荔枝蝽象若虫为害", time: "05-03" },
-                { id: 1, ratio: "", record: "果园出现花而不实现象", time: "04-15" },
-            ],
-            farming: [
-                { id: 2, ratio: "", record: "执行了膨果壮果追肥农事", time: "05-07" },
-                { id: 3, ratio: "", record: "执行了蒂蛀虫防治农事", time: "05-03" },
-                { id: 4, ratio: "", record: "执行了保花保果药剂喷施农事", time: "04-10" },
-                { id: 1, ratio: "", record: "执行了花前病虫综合防治农事", time: "03-15" },
-            ],
-            phenology: [
-                { id: 2, ratio: "65", record: "果园出现果实迅速膨大,占比", time: "05-10" },
-                { id: 3, ratio: "80", record: "果园出现谢花坐果,占比", time: "04-25" },
-                { id: 4, ratio: "", record: "果园进入盛花期", time: "03-20" },
-                { id: 1, ratio: "100", record: "果园出现花穗抽生", time: "02-15" },
-            ],
-            polygon: [
-                "MULTIPOLYGON (((110.48938292603424 21.417825047316228, 110.4899730323636 21.417990023279287, 110.49068052543606 21.417796493784067, 110.49084867401376 21.41706679240906, 110.49043306149144 21.415388479246303, 110.48927822974991 21.415515383833224, 110.48873888525532 21.416276811355146, 110.48938292603424 21.417825047316228)))",
-                "MULTIPOLYGON (((110.48996192821238 21.41538768609246, 110.49012614274784 21.415411734511736, 110.4903759544273 21.415328199567455, 110.4905258604706 21.415064079395847, 110.4906400745989 21.41417654044062, 110.49084470824545 21.413217617655164, 110.49126349338252 21.41276314060309, 110.49141339942582 21.412484743665402, 110.49060914160583 21.412625131864786, 110.49000713797136 21.41311768029294, 110.48996192821238 21.41538768609246)))",
-                "MULTIPOLYGON (((110.49144762747073 21.417923243516555, 110.49146967053326 21.417909231135127, 110.49165526849174 21.41746823769546, 110.49183769383541 21.416946342581525, 110.49196777103703 21.416824196916536, 110.49210815923641 21.416644944187453, 110.4923865561741 21.416283266114533, 110.49282437699918 21.415975522491067, 110.49311308493458 21.415770095690846, 110.49327568143673 21.415638432181936, 110.49335023788149 21.41553373589761, 110.49344541632172 21.41515064267577, 110.49345255470479 21.414922214419164, 110.49277207842925 21.414636431237852, 110.49198459250442 21.414455575677493, 110.49168240095673 21.414377846617867, 110.49167605572734 21.414614206411272, 110.49148411253958 21.414625310562485, 110.4913199297302 21.414685590241334, 110.4913104118861 21.414970332408416, 110.49127789258574 21.415159896135265, 110.49120730190918 21.415339148864177, 110.49111212346895 21.41546288083657, 110.49093366389366 21.415717483164258, 110.49088924728812 21.415978430721168, 110.49090193774674 21.416193375365253, 110.49094714750589 21.41630679633994, 110.49102963548751 21.41653443144287, 110.49111767554473 21.4168675559838, 110.49114940169142 21.41712136515764, 110.49114860853774 21.41767498641832, 110.4913286544205 21.41780585677361, 110.49144762747073 21.417923243516555)))",
-            ],
-        },
-    };
-    if (res.code === 200) {
-        mapPolygonData.value = res.data.polygon;
-        farmRecordData.value = res.data || {};
-        changeTab(floatTabLabels.value[0], 0);
-    }
-};
 </script>
 
 <style lang="scss" scoped>
@@ -230,7 +208,7 @@ const getFarmRecord = async () => {
                 height: 21px;
                 line-height: 21px;
                 padding: 0 6px;
-                width: 46px;
+                min-width: 46px;
                 box-sizing: border-box;
             }
 

+ 33 - 5
src/views/old_mini/agri_file/index.vue

@@ -30,13 +30,14 @@
                 </div>
             </div>
             <div class="map-container" ref="mapContainer"></div>
-            <file-float @map-farm-record="onFarmRecordMap"></file-float>
+            <file-float v-model:active-tab="activeRecordTab" :farm-record-data="farmRecordData"
+                :loading="farmRecordLoading" />
         </div>
     </div>
 </template>
 
 <script setup>
-import { computed, onActivated, ref } from "vue";
+import { computed, onActivated, ref, watch } from "vue";
 import { useRoute } from "vue-router";
 import { useStore } from "vuex";
 import weatherInfo from "@/components/weatherInfo.vue";
@@ -45,7 +46,7 @@ import fileFloat from "./components/fileFloat.vue";
 import FileMap from "./fileMap.js";
 import { useI18n } from "@/i18n";
 
-const { t } = useI18n();
+const { t, locale } = useI18n();
 const store = useStore();
 const route = useRoute();
 const tabBarHeight = computed(() => store.state.home.tabBarHeight);
@@ -66,10 +67,36 @@ const mapLegendItems = computed(() => [
 
 const fileMap = new FileMap();
 
-const onFarmRecordMap = ({ polygonWkt, records }) => {
-    // fileMap.setFarmRecordOverlay?.(polygonWkt, records);
+const farmRecordData = ref({});
+const farmRecordLoading = ref(false);
+const mapPolygonWkt = ref([]);
+const activeRecordTab = ref(0);
+
+const RECORD_TAB_KEYS = ["phenology", "abnormal", "farming"];
+
+const syncFarmRecordMap = () => {
+    const tabKey = RECORD_TAB_KEYS[activeRecordTab.value] || RECORD_TAB_KEYS[0];
+    const records = farmRecordData.value?.[tabKey] || [];
+    // fileMap.setFarmRecordOverlay?.(mapPolygonWkt.value, records);
 };
 
+const getFarmRecord = async () => {
+    farmRecordLoading.value = true;
+    try {
+        const res = await VE_API.monitor.getFarmRecord();
+        if (res.code === 200) {
+            mapPolygonWkt.value = res.data?.polygon ?? [];
+            farmRecordData.value = res.data || {};
+            syncFarmRecordMap();
+        }
+    } finally {
+        farmRecordLoading.value = false;
+    }
+};
+
+watch(activeRecordTab, syncFarmRecordMap);
+watch(locale, syncFarmRecordMap);
+
 const weatherExpanded = (isExpandedValue) => {
     isExpanded.value = isExpandedValue;
 };
@@ -128,6 +155,7 @@ onActivated(() => {
     gardenListRef.value?.refreshFarmList?.();
 
     fileMap.initMap("POINT(114.31 30.57)", mapContainer.value);
+    getFarmRecord();
 });
 </script>
 

+ 9 - 73
src/views/old_mini/agri_record/index.vue

@@ -16,13 +16,13 @@
         <div ref="archivesScrollAreaRef" class="archives-time-line" v-show="activeGardenTab === 'current'">
             <div class="trend-monitor-list">
                 <div class="trend-monitor-card" @click="handleTrendMonitorCardClick(item)"
-                    v-for="(item, index) in displayTrendMonitorList" :key="index">
+                    v-for="(item, index) in trendMonitorMockList" :key="index">
                     <div class="card-header">
                         <div class="header-left">
                             <span class="title">{{ item?.first_work?.work_name }}</span>
-                            <span class="level-tag">{{ t('agriRecord.level2') }}</span>
+                            <span class="level-tag" v-if="item?.risk_level">{{ t('agriRecord.riskLevel', { level: item.risk_level }) }}</span>
                         </div>
-                        <div class="status-tag" v-if="item?.risk_level">{{ t('agriRecord.pendingRecord') }}</div>
+                        <div class="status-tag">{{ t('agriRecord.pendingRecord') }}</div>
                     </div>
                     <div class="card-row">
                         <div class="reason-text">{{ item?.first_work?.work_reason_short }}</div>
@@ -44,25 +44,8 @@
 
 <script setup>
 import { useI18n } from "@/i18n";
-const { t, locale } = useI18n();
-
-const WORK_I18N_KEYS = {
-    growth: {
-        workName: "agriRecord.growthWorkName",
-        reason: "agriRecord.growthReason",
-        issue: "agriRecord.growthIssue",
-    },
-    pest: {
-        workName: "agriRecord.pestWorkName",
-        reason: "agriRecord.pestReason",
-        issue: "agriRecord.pestIssue",
-    },
-    phenology: {
-        workName: "agriRecord.phenologyWorkName",
-        reason: "agriRecord.phenologyReason",
-        issue: "agriRecord.phenologyIssue",
-    },
-};
+const { t } = useI18n();
+
 import customHeader from "@/components/customHeader.vue";
 import { ref, computed, onActivated, onDeactivated, watch, nextTick } from "vue";
 import { useStore } from "vuex";
@@ -110,63 +93,16 @@ const gardenListRef = ref(null);
 const activeGardenTab = ref('current');
 const trendMonitorMockList = ref([]);
 
-const displayTrendMonitorList = computed(() =>
-    trendMonitorMockList.value.map((item) => {
-        const keys = WORK_I18N_KEYS[item.workType];
-        if (!keys || !item.first_work) return item;
-        return {
-            ...item,
-            first_work: {
-                ...item.first_work,
-                work_name: t(keys.workName),
-                work_reason_short: t(keys.reason),
-                interaction_issue: t(keys.issue),
-            },
-        };
-    })
-);
-
 const changeGardenTab = (tab) => {
     activeGardenTab.value = tab;
 };
 
 const getFarmRiskAndTracking = async () => {
     trendMonitorMockList.value = [];
-    // const res = await VE_API.monitor.getFarmRiskAndTracking({
-    //     farm_id: gardenId.value,
-    //     crop_type: JSON.parse(localStorage.getItem("selectedFarmData")).farm_variety,
-    // });
-    const res = {
-        "code": 200,
-        "data": {
-            "growth_abnormal_tracking": {
-                "first_work": {
-                    "interaction_issue": "是否有10%的荔枝出现落果裂果?",
-                    "work_name": "长势异常态势跟踪",
-                    "work_reason_short": "缺锌导致生长缓慢"
-                },
-                "risk_level": 2,
-                "work_id": 4393
-            },
-            "pest_risk_assessment": {
-                "first_work": {
-                    "interaction_issue": "是否有10%的荔枝发现蒂蛀虫?",
-                    "work_name": "病虫害态势监控",
-                    "work_reason_short": "病虫害影响作物生长"
-                },
-                "risk_level": 2,
-                "work_id": 4394
-            },
-            "phenology_tracking": {
-                "first_work": {
-                    "interaction_issue": "是否有60%的荔枝进入转色期",
-                    "work_name": "物候跟踪记录",
-                    "work_reason_short": "预计到达病虫防控关键期"
-                },
-                "work_id": 4393
-            }
-        }
-    }
+    const res = await VE_API.monitor.getFarmRiskAndTracking({
+        farm_id: gardenId.value,
+        crop_type: JSON.parse(localStorage.getItem("selectedFarmData")).farm_variety,
+    });
     if (res.code === 200) {
         const growth = res.data?.growth_abnormal_tracking;
         const pest = res.data?.pest_risk_assessment;

+ 86 - 57
src/views/old_mini/create_farm/index.vue

@@ -59,13 +59,19 @@
                             </div>
                             <div class="create-btn">
                                 <div class="btn-item sencond-btn" @click="resetForm(ruleFormRef)">{{ t('取消') }}</div>
-                                <div class="btn-item primary-btn" @click="submitForm(ruleFormRef)">
+                                <div
+                                    class="btn-item primary-btn"
+                                    :class="{ 'is-disabled': isSubmitting }"
+                                    @click="submitForm(ruleFormRef)"
+                                >
                                     {{
-                                        paramsType === "client"
-                                            ? "添加"
-                                            : paramsType === "edit"
-                                                ? "确认修改"
-                                                : "立即创建"
+                                        isSubmitting
+                                            ? t('提交中...')
+                                            : paramsType === "client"
+                                                ? "添加"
+                                                : paramsType === "edit"
+                                                    ? "确认修改"
+                                                    : "立即创建"
                                     }}
                                 </div>
                             </div>
@@ -165,6 +171,9 @@ const isFromEditMap = ref(false);
 // 标记用户是否手动修改过农场名称
 const isFarmNameManuallyModified = ref(false);
 
+/** 创建/提交接口请求中,防止重复点击 */
+const isSubmitting = ref(false);
+
 /**
  * 根据中心点和亩数生成正方形地块WKT
  * @param {Array} center - 中心点坐标 [lng, lat]
@@ -226,25 +235,43 @@ onMounted(() => {
 
 const polygonArr = ref(null);
 const paramsType = ref(null);
+
+/** 全新创建:带 isReload,且非编辑/小程序回流 */
+function isCreateFarmFullReload() {
+    return (
+        route.query.isReload &&
+        route.query.type !== "edit" &&
+        !route.query.miniJson
+    );
+}
+
 onActivated(() => {
-    const centerPointVal = sessionStorage.getItem('centerPoint') ? JSON.parse(sessionStorage.getItem('centerPoint')) : null;
     paramsType.value = route.query.type;
 
-    centerPoint.value = centerPointVal || store.state.home.miniUserLocationPoint;
-    const arr = convertPointToArray(centerPoint.value);
-    getLocationName(`${arr[1]},${arr[0]}`);
-    // 仅在携带 isReload 标记、且不是编辑/小程序回流场景时,认为是一次全新创建,重置表单和地块,
-    // 避免破坏原有自动生成农场名称等逻辑
-    if (route.query.isReload && paramsType.value !== "edit" && !route.query.miniJson) {
-        // 重置表单字段到初始值
-        ruleFormRef.value && ruleFormRef.value.resetFields();
-        // 重置与地块绘制相关的内部状态
+    if (isCreateFarmFullReload()) {
+        // 先清缓存与位置状态,避免沿用上次搜索的 centerPoint / 地址
+        sessionStorage.removeItem("centerPoint");
+        centerPoint.value = store.state.home.miniUserLocationPoint;
+        locationVal.value = null;
+        locationOptions.list = [];
+        pointAddress.value = null;
+        farmCity.value = null;
         polygonArr.value = null;
         isFromEditMap.value = false;
-        // 重置农场名称手动修改标记,允许自动生成农场名称
         isFarmNameManuallyModified.value = false;
-        // 清空上一次地块缓存
+        ruleForm.farm_address = "";
+        ruleForm.farm_area = "";
+        ruleForm.farm_name = "";
+        ruleFormRef.value?.resetFields();
         store.commit("home/SET_FARM_POLYGON", null);
+        isSubmitting.value = false;
+    } else {
+        const centerPointVal = sessionStorage.getItem("centerPoint")
+            ? JSON.parse(sessionStorage.getItem("centerPoint"))
+            : null;
+        centerPoint.value = centerPointVal || store.state.home.miniUserLocationPoint;
+        const arr = convertPointToArray(centerPoint.value);
+        getLocationName(`${arr[1]},${arr[0]}`);
     }
     // 确保地图已初始化,使用 nextTick 等待 DOM 更新
     nextTick(() => {
@@ -273,7 +300,7 @@ onDeactivated(() => {
 
 // 处理地图更新的逻辑
 function handleMapUpdate() {
-    if (route.query.isReload) {
+    if (isCreateFarmFullReload()) {
         // 清除旧的地块数据
         store.commit("home/SET_FARM_POLYGON", null);
         isFromEditMap.value = false; // 从home进入,可以手动输入
@@ -425,50 +452,47 @@ const rules = reactive({
 });
 
 const submitForm = (formEl) => {
-    if (!formEl) return;
+    if (!formEl || isSubmitting.value) return;
     formEl.validate((valid) => {
-        if (valid) {
-            const cropItems = parseSelectedCropItems();
-            if (!cropItems) {
-                ElMessage.warning({ message: t('请先点击「种植作物」选择作物品类'), type: 'warning' });
-                return;
-            }
-            const params = {
-                ...ruleForm,
-                farm_location: centerPoint.value,
-                farm_variety: cropItems.map((item) => item.variety_code).join(","),
-                farm_category: cropItems.map((item) => item.categorycode).join(","),
-                // 编辑时geom不是数组,新增时是数组
-                // geom:
-                //     route.query.type === "edit"
-                //         ? polygonArr.value && polygonArr.value.length > 0
-                //             ? polygonArr.value[0]
-                //             : null
-                //         : polygonArr.value,
-            };
+        if (!valid) return;
+        const cropItems = parseSelectedCropItems();
+        if (!cropItems) {
+            ElMessage.warning({ message: t('请先点击「种植作物」选择作物品类'), type: 'warning' });
+            return;
+        }
+        const params = {
+            ...ruleForm,
+            farm_location: centerPoint.value,
+            varieties: cropItems.map(
+                (item) => `${item.variety_code}-${item.categorycode}`,
+            ),
+            farm_polygon:
+                polygonArr.value && polygonArr.value.length > 0
+                    ? polygonArr.value[0]
+                    : null,
+        };
 
-            // 如果是编辑模式,添加农场ID
-            if (route.query.type === "edit" && route.query.farmId) {
-                params.id = route.query.farmId;
-            }
+        if (route.query.type === "edit" && route.query.farmId) {
+            params.id = route.query.farmId;
+        }
 
-            if (route.query.type !== "edit") {
-                // 处理 geom 参数,如果是数组需要序列化
-                const queryParams = {
-                    ...params,
-                };
-                // 如果 geom 是数组,需要序列化为 JSON 字符串
-                if (Array.isArray(queryParams.geom)) {
-                    queryParams.geom = JSON.stringify(queryParams.geom);
-                }
+        if (route.query.type !== "edit") {
+            const queryParams = { ...params };
+            if (Array.isArray(queryParams.geom)) {
+                queryParams.geom = JSON.stringify(queryParams.geom);
+            }
 
-                VE_API.farm.createFarm(queryParams).then(({ data, code }) => {
+            isSubmitting.value = true;
+            VE_API.farm.createFarm(queryParams)
+                .then(({ code }) => {
                     if (code === 200) {
-                        showPlantingReportPopup.value = true; 
+                        showPlantingReportPopup.value = true;
                         sessionStorage.removeItem(SESSION_SELECT_CROP_KEY);
                     }
+                })
+                .finally(() => {
+                    isSubmitting.value = false;
                 });
-            }
         }
     });
 };
@@ -596,8 +620,8 @@ function handleFarmNameInput() {
 
 // 根据地址更新农场名称(如果满足条件)
 function updateFarmNameIfNeeded() {
-    // 只有在创建模式下且用户没有手动修改过农场名称时,才自动更新农场名称
-    if (route.query.type !== "edit" && !isFarmNameManuallyModified.value && farmCity.value && !ruleForm.farm_name) {
+    // 创建模式且未手动改过名称时,地址变化后同步更新(含已有自动名称的场景)
+    if (route.query.type !== "edit" && !isFarmNameManuallyModified.value && farmCity.value) {
         ruleForm.farm_name = farmCity.value + "农场";
     }
 }
@@ -944,6 +968,11 @@ function handleMianjiInput(value) {
                     &.primary-btn {
                         background: linear-gradient(180deg, #76c3ff, #2199f8);
                         color: #fff;
+
+                        &.is-disabled {
+                            opacity: 0.6;
+                            pointer-events: none;
+                        }
                     }
                 }
 

+ 6 - 2
src/views/old_mini/create_farm/selectCrop.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="select-crop-page">
-        <custom-header :name="$t('选择作物')"></custom-header>
+        <custom-header :name="$t('选择作物')" @back="handleBack"></custom-header>
         <div class="page-body">
             <div class="top-tabs">
                 <div v-for="(m, mi) in majorTabList" :key="m.key" class="tab-item"
@@ -524,7 +524,11 @@ const handleConfirm = () => {
         ElMessage.warning("保存选中结果失败,请重试");
         return;
     }
-    router.back();
+    handleBack();
+};
+
+const handleBack = () => {
+    router.replace({ path: "/create_farm", query: { from: 'growth_report' } });
 };
 
 const handleSwitch = () => {