|
@@ -25,15 +25,90 @@ import { useI18n } from "@/i18n";
|
|
|
const { t } = useI18n();
|
|
const { t } = useI18n();
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
|
|
|
|
|
-const defaultAvatar = require("@/assets/img/home/banner.png");
|
|
|
|
|
|
|
+const defaultAvatar = require("@/assets/img/common/profile.png");
|
|
|
const farmName = ref("");
|
|
const farmName = ref("");
|
|
|
const farmLocation = ref("");
|
|
const farmLocation = ref("");
|
|
|
const circleUrl = ref(defaultAvatar);
|
|
const circleUrl = ref(defaultAvatar);
|
|
|
|
|
+const ENTRY_FARM_DATA_KEY = "ENTRY_FARM_DATA";
|
|
|
|
|
+const MAP_KEY = "CZLBZ-LJICQ-R4A5J-BN62X-YXCRJ-GNBUT";
|
|
|
|
|
|
|
|
-const applyFarmInfo = (farm = {}) => {
|
|
|
|
|
- farmName.value = farm.farm_name || farm.name || t("agriFile.farmName");
|
|
|
|
|
- farmLocation.value = farm.farm_address || farm.rawAddress || farm.city || t("agriFile.farmLocation");
|
|
|
|
|
- circleUrl.value = farm.cover || farm.image || farm.avatar || defaultAvatar;
|
|
|
|
|
|
|
+/** 优先录入信息里的用户姓名 */
|
|
|
|
|
+function resolveUserName() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const entry = JSON.parse(localStorage.getItem(ENTRY_FARM_DATA_KEY) || "null");
|
|
|
|
|
+ if (entry?.name) return String(entry.name).trim();
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ // ignore
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ const userInfo = JSON.parse(localStorage.getItem("localUserInfo") || "{}");
|
|
|
|
|
+ const name = userInfo.user_name || userInfo.username || userInfo.name || userInfo.nickName;
|
|
|
|
|
+ if (name) return String(name).trim();
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ // ignore
|
|
|
|
|
+ }
|
|
|
|
|
+ return "";
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function utilWktToCoordinate(point) {
|
|
|
|
|
+ const match = String(point || "").match(/POINT\s*\(([\d.\-]+)\s+([\d.\-]+)\)/i);
|
|
|
|
|
+ if (!match) return null;
|
|
|
|
|
+ return [Number(match[1]), Number(match[2])];
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function formatRegionParts(result) {
|
|
|
|
|
+ const ad = result?.ad_info || {};
|
|
|
|
|
+ const ac = result?.address_component || {};
|
|
|
|
|
+ const province = ad.province || ac.province || "";
|
|
|
|
|
+ const city = ad.city || ac.city || "";
|
|
|
|
|
+ const district = ad.district || ac.district || "";
|
|
|
|
|
+ const parts = [];
|
|
|
|
|
+ if (province) parts.push(province);
|
|
|
|
|
+ if (city && city !== province) parts.push(city);
|
|
|
|
|
+ if (district && district !== city) parts.push(district);
|
|
|
|
|
+ return parts.join("") || district || city || province || "";
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 优先用户选点位置;缺省时用点位反查并补全省份 */
|
|
|
|
|
+async function resolveUserLocation() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const entry = JSON.parse(localStorage.getItem(ENTRY_FARM_DATA_KEY) || "null");
|
|
|
|
|
+ if (!entry) return "";
|
|
|
|
|
+ const cached = entry.region ? String(entry.region).trim() : "";
|
|
|
|
|
+ // 已含省级则直接用
|
|
|
|
|
+ if (cached && /省|市|自治区|特别行政区/.test(cached.slice(0, 4))) {
|
|
|
|
|
+ return cached;
|
|
|
|
|
+ }
|
|
|
|
|
+ const coordinate = utilWktToCoordinate(entry.point);
|
|
|
|
|
+ if (!coordinate) return cached;
|
|
|
|
|
+ const { result } = await VE_API.old_mini_map.location({
|
|
|
|
|
+ key: MAP_KEY,
|
|
|
|
|
+ location: `${coordinate[1]},${coordinate[0]}`,
|
|
|
|
|
+ });
|
|
|
|
|
+ const full = formatRegionParts(result);
|
|
|
|
|
+ if (full) {
|
|
|
|
|
+ localStorage.setItem(
|
|
|
|
|
+ ENTRY_FARM_DATA_KEY,
|
|
|
|
|
+ JSON.stringify({ ...entry, region: full })
|
|
|
|
|
+ );
|
|
|
|
|
+ return full;
|
|
|
|
|
+ }
|
|
|
|
|
+ return cached;
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ // ignore
|
|
|
|
|
+ }
|
|
|
|
|
+ return "";
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const applyFarmInfo = async (farm = {}) => {
|
|
|
|
|
+ farmName.value = resolveUserName() || farm.farm_name || farm.name || t("agriFile.farmName");
|
|
|
|
|
+ farmLocation.value =
|
|
|
|
|
+ (await resolveUserLocation()) ||
|
|
|
|
|
+ farm.farm_address ||
|
|
|
|
|
+ farm.rawAddress ||
|
|
|
|
|
+ farm.city ||
|
|
|
|
|
+ t("agriFile.farmLocation");
|
|
|
|
|
+ circleUrl.value = defaultAvatar;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const hasSelectedFarm = (farm) => {
|
|
const hasSelectedFarm = (farm) => {
|
|
@@ -74,14 +149,14 @@ const loadFirstFarmAsSelected = async () => {
|
|
|
const { data } = await VE_API.farm.getFarmList();
|
|
const { data } = await VE_API.farm.getFarmList();
|
|
|
const first = (data || [])[0];
|
|
const first = (data || [])[0];
|
|
|
if (!first) {
|
|
if (!first) {
|
|
|
- applyFarmInfo();
|
|
|
|
|
|
|
+ await applyFarmInfo();
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
const farm = normalizeFarm(first);
|
|
const farm = normalizeFarm(first);
|
|
|
saveSelectedFarm(farm);
|
|
saveSelectedFarm(farm);
|
|
|
- applyFarmInfo(farm);
|
|
|
|
|
|
|
+ await applyFarmInfo(farm);
|
|
|
} catch {
|
|
} catch {
|
|
|
- applyFarmInfo();
|
|
|
|
|
|
|
+ await applyFarmInfo();
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -89,7 +164,7 @@ const loadFarmInfo = async () => {
|
|
|
try {
|
|
try {
|
|
|
const farm = JSON.parse(localStorage.getItem("selectedFarmData") || "{}");
|
|
const farm = JSON.parse(localStorage.getItem("selectedFarmData") || "{}");
|
|
|
if (hasSelectedFarm(farm)) {
|
|
if (hasSelectedFarm(farm)) {
|
|
|
- applyFarmInfo(farm);
|
|
|
|
|
|
|
+ await applyFarmInfo(farm);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
await loadFirstFarmAsSelected();
|
|
await loadFirstFarmAsSelected();
|