|
@@ -55,15 +55,20 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
|
-import { ref, onActivated, computed } from "vue";
|
|
|
|
|
|
|
+import { ref, onActivated, computed, watch } from "vue";
|
|
|
import weatherChart from "./weatherChart.vue";
|
|
import weatherChart from "./weatherChart.vue";
|
|
|
import { useRouter } from "vue-router";
|
|
import { useRouter } from "vue-router";
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
|
isGarden: {
|
|
isGarden: {
|
|
|
type: Boolean,
|
|
type: Boolean,
|
|
|
default: false
|
|
default: false
|
|
|
|
|
+ },
|
|
|
|
|
+ gardenId: {
|
|
|
|
|
+ type: [Number, String],
|
|
|
|
|
+ default: null
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
// 定义emit事件
|
|
// 定义emit事件
|
|
|
const emit = defineEmits(['weatherExpanded','changeGarden']);
|
|
const emit = defineEmits(['weatherExpanded','changeGarden']);
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
@@ -94,34 +99,100 @@ const farmName = ref("");
|
|
|
const farmList = ref([]);
|
|
const farmList = ref([]);
|
|
|
const isDefaultFarm = ref(false); // 添加默认农场标识
|
|
const isDefaultFarm = ref(false); // 添加默认农场标识
|
|
|
|
|
|
|
|
|
|
+// 根据传入的gardenId设置农场(先刷新列表再设置)
|
|
|
|
|
+async function setFarmByGardenId(gardenIdValue) {
|
|
|
|
|
+ if (!gardenIdValue) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 先刷新农场列表,确保数据是最新的
|
|
|
|
|
+ return new Promise((resolve) => {
|
|
|
|
|
+ VE_API.farm.userFarmSelectOption().then(({data}) => {
|
|
|
|
|
+ farmList.value = data || [];
|
|
|
|
|
+ if (data && data.length > 0) {
|
|
|
|
|
+ const targetFarm = data.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);
|
|
|
|
|
+ emit('changeGarden', { id: farmId.value, name: farmName.value });
|
|
|
|
|
+ resolve(true);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ resolve(false);
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(() => {
|
|
|
|
|
+ resolve(false);
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// 获取农场列表
|
|
// 获取农场列表
|
|
|
function getFarmList() {
|
|
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;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果没有传入 gardenId,执行正常逻辑
|
|
|
|
|
+ getFarmListWithoutGardenId();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 从列表中选择农场(使用已有列表数据)
|
|
|
|
|
+function selectFarmFromList(data) {
|
|
|
|
|
+ // 使用 localStorage 中保存的农场选择
|
|
|
|
|
+ const savedFarmId = localStorage.getItem('selectedFarmId');
|
|
|
|
|
+ const savedFarmName = localStorage.getItem('selectedFarmName');
|
|
|
|
|
+ if (savedFarmId && savedFarmName) {
|
|
|
|
|
+ // 检查保存的农场是否还在当前列表中
|
|
|
|
|
+ const savedFarm = data.find(farm => farm.id == savedFarmId);
|
|
|
|
|
+ if (savedFarm) {
|
|
|
|
|
+ farmName.value = savedFarmName;
|
|
|
|
|
+ farmId.value = Number(savedFarmId);
|
|
|
|
|
+ isDefaultFarm.value = savedFarm.defaultOption || false;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果保存的农场不在列表中,按优先级选择
|
|
|
|
|
+ selectDefaultFarm(data);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果没有保存的选择,按优先级选择
|
|
|
|
|
+ selectDefaultFarm(data);
|
|
|
|
|
+ }
|
|
|
|
|
+ emit('changeGarden',{id: farmId.value, name: farmName.value});
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 获取农场列表(不处理传入的gardenId)
|
|
|
|
|
+function getFarmListWithoutGardenId() {
|
|
|
VE_API.farm.userFarmSelectOption().then(({data}) => {
|
|
VE_API.farm.userFarmSelectOption().then(({data}) => {
|
|
|
farmList.value = data || []
|
|
farmList.value = data || []
|
|
|
if (data && data.length > 0) {
|
|
if (data && data.length > 0) {
|
|
|
- // 优先使用 localStorage 中保存的农场选择
|
|
|
|
|
- const savedFarmId = localStorage.getItem('selectedFarmId');
|
|
|
|
|
- const savedFarmName = localStorage.getItem('selectedFarmName');
|
|
|
|
|
- if (savedFarmId && savedFarmName) {
|
|
|
|
|
- // 检查保存的农场是否还在当前列表中
|
|
|
|
|
- const savedFarm = data.find(farm => farm.id == savedFarmId);
|
|
|
|
|
- if (savedFarm) {
|
|
|
|
|
- farmName.value = savedFarmName;
|
|
|
|
|
- farmId.value = Number(savedFarmId);
|
|
|
|
|
- isDefaultFarm.value = savedFarm.defaultOption || false;
|
|
|
|
|
- } else {
|
|
|
|
|
- // 如果保存的农场不在列表中,按优先级选择
|
|
|
|
|
- selectDefaultFarm(data);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- // 如果没有保存的选择,按优先级选择
|
|
|
|
|
- selectDefaultFarm(data);
|
|
|
|
|
- }
|
|
|
|
|
- emit('changeGarden',{id: farmId.value, name: farmName.value});
|
|
|
|
|
|
|
+ selectFarmFromList(data);
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// 监听父组件传入的gardenId变化
|
|
|
|
|
+watch(() => props.gardenId, (newGardenId) => {
|
|
|
|
|
+ if (newGardenId) {
|
|
|
|
|
+ // 直接调用 setFarmByGardenId,它会刷新列表并设置
|
|
|
|
|
+ setFarmByGardenId(newGardenId);
|
|
|
|
|
+ }
|
|
|
|
|
+}, { immediate: false });
|
|
|
|
|
+
|
|
|
// 选择默认农场的逻辑
|
|
// 选择默认农场的逻辑
|
|
|
function selectDefaultFarm(data) {
|
|
function selectDefaultFarm(data) {
|
|
|
// 首先查找 defaultOption 为 true 的农场
|
|
// 首先查找 defaultOption 为 true 的农场
|
|
@@ -310,7 +381,7 @@ const currentDateText = computed(() => {
|
|
|
overflow-y: auto;
|
|
overflow-y: auto;
|
|
|
&.el-dropdown__popper {
|
|
&.el-dropdown__popper {
|
|
|
.el-dropdown__list {
|
|
.el-dropdown__list {
|
|
|
- max-width: 220px;
|
|
|
|
|
|
|
+ max-width: 240px;
|
|
|
}
|
|
}
|
|
|
.el-dropdown-menu__item{
|
|
.el-dropdown-menu__item{
|
|
|
background-color: transparent !important;
|
|
background-color: transparent !important;
|