|
@@ -90,20 +90,16 @@
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <!-- 农场信息 -->
|
|
|
|
|
- <farm-info-popup ref="myFarmInfoRef" :showEditBtn="false" :showBtn="true" :farmId="farmId"
|
|
|
|
|
- @success="onFarmBasicInfoSaved"></farm-info-popup>
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
|
-import { ref, onActivated, computed, watch, onMounted } from "vue";
|
|
|
|
|
|
|
+import { ref, onActivated, computed } from "vue";
|
|
|
import weatherChart from "./weatherChart.vue";
|
|
import weatherChart from "./weatherChart.vue";
|
|
|
import { useRouter } from "vue-router";
|
|
import { useRouter } from "vue-router";
|
|
|
import { useStore } from "vuex";
|
|
import { useStore } from "vuex";
|
|
|
-import { Search } from '@element-plus/icons-vue'
|
|
|
|
|
-import farmInfoPopup from "@/views/old_mini/home/components/farmInfoPopup.vue";
|
|
|
|
|
|
|
+import { Search } from '@element-plus/icons-vue';
|
|
|
import { convertPointToArray } from "@/utils/index";
|
|
import { convertPointToArray } from "@/utils/index";
|
|
|
const store = useStore();
|
|
const store = useStore();
|
|
|
|
|
|
|
@@ -118,36 +114,6 @@ const props = defineProps({
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-// 定义emit事件
|
|
|
|
|
-const emit = defineEmits(['weatherExpanded', 'changeGarden', 'changeGardenTab']);
|
|
|
|
|
-const router = useRouter();
|
|
|
|
|
-const handleCommand = ({ id, name }) => {
|
|
|
|
|
- farmName.value = name;
|
|
|
|
|
- farmId.value = id;
|
|
|
|
|
- // 更新默认农场标识
|
|
|
|
|
- const selectedFarm = farmList.value.find(farm => farm.id === id);
|
|
|
|
|
- isDefaultFarm.value = selectedFarm ? selectedFarm.defaultOption || false : false;
|
|
|
|
|
- // 保存用户选择的农场到 localStorage
|
|
|
|
|
- localStorage.setItem('selectedFarmId', id);
|
|
|
|
|
- localStorage.setItem('selectedFarmName', name);
|
|
|
|
|
- localStorage.setItem('selectedFarmPoint', selectedFarm.wkt);
|
|
|
|
|
- getLocationName();
|
|
|
|
|
- getWeatherData();
|
|
|
|
|
- emit('changeGarden', { id, name });
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-const isExpanded = ref(false);
|
|
|
|
|
-const toggleExpand = () => {
|
|
|
|
|
- isExpanded.value = !isExpanded.value;
|
|
|
|
|
- emit('weatherExpanded', isExpanded.value);
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-const farmId = ref(null);
|
|
|
|
|
-const farmName = ref("");
|
|
|
|
|
-const farmList = ref([]);
|
|
|
|
|
-const hasFarm = ref(false)
|
|
|
|
|
-const activeGarden = ref('current');
|
|
|
|
|
-const isDefaultFarm = ref(false); // 添加默认农场标识
|
|
|
|
|
const regionVal = ref('');
|
|
const regionVal = ref('');
|
|
|
const typeVal = ref('');
|
|
const typeVal = ref('');
|
|
|
const searchFarm = ref('');
|
|
const searchFarm = ref('');
|
|
@@ -163,157 +129,61 @@ const typeOptions = ref([{
|
|
|
value: '1'
|
|
value: '1'
|
|
|
}]);
|
|
}]);
|
|
|
|
|
|
|
|
-// 根据传入的gardenId设置农场(先刷新列表再设置)
|
|
|
|
|
-async function setFarmByGardenId(gardenIdValue) {
|
|
|
|
|
- if (!gardenIdValue) {
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+// 定义emit事件
|
|
|
|
|
+const emit = defineEmits(['weatherExpanded', 'changeGarden', 'changeGardenTab']);
|
|
|
|
|
+const router = useRouter();
|
|
|
|
|
|
|
|
- // 先刷新农场列表,确保数据是最新的
|
|
|
|
|
- return new Promise((resolve) => {
|
|
|
|
|
- VE_API.farm.listByUserId().then(({ data }) => {
|
|
|
|
|
- // const fullData = data.filter(item => item.userType === 2);
|
|
|
|
|
- const fullData = data;
|
|
|
|
|
- farmList.value = fullData || [];
|
|
|
|
|
- if (fullData && fullData.length > 0) {
|
|
|
|
|
- hasFarm.value = true;
|
|
|
|
|
- const targetFarm = fullData.find(farm => farm.id == gardenIdValue);
|
|
|
|
|
- if (targetFarm) {
|
|
|
|
|
- farmName.value = targetFarm.name;
|
|
|
|
|
- farmId.value = Number(gardenIdValue);
|
|
|
|
|
- isDefaultFarm.value = targetFarm.defaultOption || false;
|
|
|
|
|
- // 保存到 localStorage
|
|
|
|
|
- localStorage.setItem('selectedFarmId', farmId.value);
|
|
|
|
|
- localStorage.setItem('selectedFarmName', farmName.value);
|
|
|
|
|
- localStorage.setItem('selectedFarmPoint', targetFarm.wkt);
|
|
|
|
|
-
|
|
|
|
|
- getLocationName();
|
|
|
|
|
- getWeatherData();
|
|
|
|
|
- emit('changeGarden', { id: farmId.value, name: farmName.value });
|
|
|
|
|
- resolve(true);
|
|
|
|
|
- } else {
|
|
|
|
|
- resolve(false);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- farmList.value = [];
|
|
|
|
|
- hasFarm.value = false;
|
|
|
|
|
- getLocationName();
|
|
|
|
|
- getWeatherData();
|
|
|
|
|
- resolve(false);
|
|
|
|
|
- }
|
|
|
|
|
- }).catch(() => {
|
|
|
|
|
- resolve(false);
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
-}
|
|
|
|
|
|
|
+const isExpanded = ref(false);
|
|
|
|
|
+const toggleExpand = () => {
|
|
|
|
|
+ isExpanded.value = !isExpanded.value;
|
|
|
|
|
+ emit('weatherExpanded', isExpanded.value);
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
-// 获取农场列表
|
|
|
|
|
-function getFarmList() {
|
|
|
|
|
- // 如果传入了 gardenId,优先使用 setFarmByGardenId(它会刷新列表并设置)
|
|
|
|
|
- if (props.gardenId) {
|
|
|
|
|
- setFarmByGardenId(props.gardenId).then((setSuccess) => {
|
|
|
|
|
- // 如果设置失败,使用已获取的列表数据执行默认逻辑(避免重复请求)
|
|
|
|
|
- if (!setSuccess && farmList.value && farmList.value.length > 0) {
|
|
|
|
|
- selectFarmFromList(farmList.value);
|
|
|
|
|
- } else if (!setSuccess) {
|
|
|
|
|
- // 如果列表为空,再次获取列表
|
|
|
|
|
- getFarmListWithoutGardenId();
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+const farmId = ref(null);
|
|
|
|
|
+const farmName = ref("");
|
|
|
|
|
+const hasFarm = ref(false)
|
|
|
|
|
+const activeGarden = ref('current');
|
|
|
|
|
|
|
|
- // 如果没有传入 gardenId,执行正常逻辑
|
|
|
|
|
- getFarmListWithoutGardenId();
|
|
|
|
|
|
|
+function initSelectedFarm() {
|
|
|
|
|
+ const savedFarmId = localStorage.getItem("selectedFarmId");
|
|
|
|
|
+ const savedFarmName = localStorage.getItem("selectedFarmName");
|
|
|
|
|
+ farmId.value = savedFarmId ? Number(savedFarmId) : null;
|
|
|
|
|
+ farmName.value = savedFarmName || "";
|
|
|
|
|
+ hasFarm.value = !!farmId.value;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 从列表中选择农场(使用已有列表数据)
|
|
|
|
|
-function selectFarmFromList(data) {
|
|
|
|
|
- // 使用 localStorage 中保存的农场选择
|
|
|
|
|
- const savedFarmId = localStorage.getItem('selectedFarmId');
|
|
|
|
|
- const savedFarmName = localStorage.getItem('selectedFarmName');
|
|
|
|
|
- if (savedFarmId && savedFarmName) {
|
|
|
|
|
- // 检查保存的农场是否还在当前列表中(名称以接口列表为准,避免改名后仍显示 localStorage 旧值)
|
|
|
|
|
- const savedFarm = data.find(farm => farm.id == savedFarmId);
|
|
|
|
|
- if (savedFarm) {
|
|
|
|
|
- farmName.value = savedFarm.name;
|
|
|
|
|
- farmId.value = Number(savedFarmId);
|
|
|
|
|
- isDefaultFarm.value = savedFarm.defaultOption || false;
|
|
|
|
|
- localStorage.setItem('selectedFarmPoint', savedFarm.wkt);
|
|
|
|
|
- localStorage.setItem('selectedFarmName', savedFarm.name);
|
|
|
|
|
- } else {
|
|
|
|
|
- // 如果保存的农场不在列表中,按优先级选择
|
|
|
|
|
- selectDefaultFarm(data);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- // 如果没有保存的选择,按优先级选择
|
|
|
|
|
- selectDefaultFarm(data);
|
|
|
|
|
- }
|
|
|
|
|
- getLocationName();
|
|
|
|
|
- getWeatherData();
|
|
|
|
|
- emit('changeGarden', { id: farmId.value, name: farmName.value });
|
|
|
|
|
-}
|
|
|
|
|
|
|
+onActivated(() => {
|
|
|
|
|
+ // initSelectedFarm();
|
|
|
|
|
+ // getLocationName();
|
|
|
|
|
+ // getWeatherData();
|
|
|
|
|
+});
|
|
|
|
|
|
|
|
-// 获取农场列表(不处理传入的gardenId)
|
|
|
|
|
-function getFarmListWithoutGardenId() {
|
|
|
|
|
- VE_API.farm.listByUserId().then(({ data }) => {
|
|
|
|
|
- // const fullData = data.filter(item => item.userType === 2);
|
|
|
|
|
- const fullData = data;
|
|
|
|
|
- farmList.value = fullData || [];
|
|
|
|
|
- if (fullData && fullData.length > 0) {
|
|
|
|
|
- hasFarm.value = true;
|
|
|
|
|
- selectFarmFromList(fullData);
|
|
|
|
|
- } else {
|
|
|
|
|
- farmList.value = [];
|
|
|
|
|
- hasFarm.value = false;
|
|
|
|
|
- getLocationName();
|
|
|
|
|
- getWeatherData();
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
|
|
+function setGardenLoaded(hasFarmData) {
|
|
|
|
|
+ hasFarm.value = !!hasFarmData;
|
|
|
|
|
+ if (!hasFarm.value) {
|
|
|
|
|
+ farmId.value = null;
|
|
|
|
|
+ farmName.value = "";
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 监听父组件传入的gardenId变化
|
|
|
|
|
-watch(() => props.gardenId, (newGardenId) => {
|
|
|
|
|
- if (newGardenId) {
|
|
|
|
|
- // 直接调用 setFarmByGardenId,它会刷新列表并设置
|
|
|
|
|
- setFarmByGardenId(newGardenId);
|
|
|
|
|
- }
|
|
|
|
|
-}, { immediate: false });
|
|
|
|
|
-
|
|
|
|
|
-// 选择默认农场的逻辑
|
|
|
|
|
-function selectDefaultFarm(data) {
|
|
|
|
|
- // 首先查找 defaultOption 为 true 的农场
|
|
|
|
|
- const defaultFarm = data.find(farm => farm.defaultOption === true);
|
|
|
|
|
-
|
|
|
|
|
- if (defaultFarm) {
|
|
|
|
|
- // 如果有默认农场,选择它
|
|
|
|
|
- farmName.value = defaultFarm.name;
|
|
|
|
|
- farmId.value = defaultFarm.id;
|
|
|
|
|
- isDefaultFarm.value = true;
|
|
|
|
|
- localStorage.setItem('selectedFarmPoint', defaultFarm.wkt);
|
|
|
|
|
- } else {
|
|
|
|
|
- // 如果没有默认农场,选择第一个
|
|
|
|
|
- farmName.value = data[0].name;
|
|
|
|
|
- farmId.value = data[0].id;
|
|
|
|
|
- isDefaultFarm.value = data[0].defaultOption || false;
|
|
|
|
|
- localStorage.setItem('selectedFarmPoint', data[0].wkt);
|
|
|
|
|
|
|
+function setSelectedGarden(payload) {
|
|
|
|
|
+ if (!payload?.id) {
|
|
|
|
|
+ setGardenLoaded(false);
|
|
|
|
|
+ return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 保存到 localStorage
|
|
|
|
|
- localStorage.setItem('selectedFarmId', farmId.value);
|
|
|
|
|
- localStorage.setItem('selectedFarmName', farmName.value);
|
|
|
|
|
- localStorage.setItem('selectedFarmPoint', data[0].wkt);
|
|
|
|
|
|
|
+ hasFarm.value = true;
|
|
|
|
|
+ farmId.value = Number(payload.id);
|
|
|
|
|
+ farmName.value = payload.name || "";
|
|
|
getLocationName();
|
|
getLocationName();
|
|
|
getWeatherData();
|
|
getWeatherData();
|
|
|
|
|
+ emit('changeGarden', { id: farmId.value, name: farmName.value });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-onActivated(() => {
|
|
|
|
|
- getFarmList();
|
|
|
|
|
-});
|
|
|
|
|
-
|
|
|
|
|
-// 暴露刷新方法供父组件调用
|
|
|
|
|
|
|
+// 暴露方法供父页面(如长势报告)同步农场列表状态
|
|
|
defineExpose({
|
|
defineExpose({
|
|
|
- refreshFarmList: getFarmList,
|
|
|
|
|
|
|
+ setGardenLoaded,
|
|
|
|
|
+ setSelectedGarden,
|
|
|
toggleExpand
|
|
toggleExpand
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -337,34 +207,10 @@ function getLocationName() {
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const myFarmInfoRef = ref(null);
|
|
|
|
|
-
|
|
|
|
|
-/** 弹窗内修改农场名称等成功后,同步头部展示与下拉列表、本地缓存 */
|
|
|
|
|
-function onFarmBasicInfoSaved(payload) {
|
|
|
|
|
- if (!payload?.id || payload.name == null) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- const savedId = Number(payload.id);
|
|
|
|
|
- const idx = farmList.value.findIndex((f) => f.id == savedId);
|
|
|
|
|
- if (idx !== -1) {
|
|
|
|
|
- farmList.value[idx] = { ...farmList.value[idx], name: payload.name };
|
|
|
|
|
- }
|
|
|
|
|
- if (farmId.value == savedId) {
|
|
|
|
|
- farmName.value = payload.name;
|
|
|
|
|
- localStorage.setItem('selectedFarmName', payload.name);
|
|
|
|
|
- emit('changeGarden', { id: farmId.value, name: farmName.value });
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
const handleGardenClick = (type) => {
|
|
const handleGardenClick = (type) => {
|
|
|
activeGarden.value = type;
|
|
activeGarden.value = type;
|
|
|
emit("changeGardenTab", type);
|
|
emit("changeGardenTab", type);
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
-const handleFarmInfo = () => {
|
|
|
|
|
- // myFarmInfoRef.value.handleShow();
|
|
|
|
|
- router.push(`/farm_info?subjectId=${farmId.value}`);
|
|
|
|
|
-}
|
|
|
|
|
const handleAddFarm = () => {
|
|
const handleAddFarm = () => {
|
|
|
router.push(`/create_farm?from=${props.from}&isReload=true`);
|
|
router.push(`/create_farm?from=${props.from}&isReload=true`);
|
|
|
}
|
|
}
|