ソースを参照

feat:修改头部显示信息

wangsisi 2 週間 前
親
コミット
8a1dc486d5

BIN
src/assets/img/common/profile.png


+ 84 - 9
src/components/farmHeader.vue

@@ -25,15 +25,90 @@ import { useI18n } from "@/i18n";
 const { t } = useI18n();
 const router = useRouter();
 
-const defaultAvatar = require("@/assets/img/home/banner.png");
+const defaultAvatar = require("@/assets/img/common/profile.png");
 const farmName = ref("");
 const farmLocation = ref("");
 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) => {
@@ -74,14 +149,14 @@ const loadFirstFarmAsSelected = async () => {
         const { data } = await VE_API.farm.getFarmList();
         const first = (data || [])[0];
         if (!first) {
-            applyFarmInfo();
+            await applyFarmInfo();
             return;
         }
         const farm = normalizeFarm(first);
         saveSelectedFarm(farm);
-        applyFarmInfo(farm);
+        await applyFarmInfo(farm);
     } catch {
-        applyFarmInfo();
+        await applyFarmInfo();
     }
 };
 
@@ -89,7 +164,7 @@ const loadFarmInfo = async () => {
     try {
         const farm = JSON.parse(localStorage.getItem("selectedFarmData") || "{}");
         if (hasSelectedFarm(farm)) {
-            applyFarmInfo(farm);
+            await applyFarmInfo(farm);
             return;
         }
         await loadFirstFarmAsSelected();

+ 1 - 1
src/views/old_mini/agri_file/index.vue

@@ -54,7 +54,7 @@
                             <div class="tracking-item__action-main">
                                 <div class="tracking-item__icon">
                                     <img :src="patrolIcon" alt="" />
-                                    <span class="tracking-item__reason">{{ item.interaction_problem }}</span>
+                                    <span class="tracking-item__reason">{{ item.interaction_title || item.interaction_problem }}</span>
                                 </div>
                                 <div class="tracking-item__issue">{{ item.interaction_reason }}</div>
                             </div>

+ 14 - 10
src/views/old_mini/entry_information/components/baInformation.vue

@@ -283,7 +283,7 @@ function clearFormDraft() {
     sessionStorage.removeItem(STEP_KEY);
 }
 
-/** 根据点位反查地区名(区县优先) */
+/** 根据点位反查地区名(省 + 市 + 区) */
 async function resolveRegionName(point) {
     const coordinate = utilWktToCoordinate(point);
     if (!coordinate) return "";
@@ -292,13 +292,16 @@ async function resolveRegionName(point) {
             key: MAP_KEY,
             location: `${coordinate[1]},${coordinate[0]}`,
         });
-        return (
-            result?.ad_info?.district ||
-            result?.ad_info?.city ||
-            result?.address_component?.district ||
-            result?.address_component?.city ||
-            ""
-        );
+        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 || "";
     } catch {
         return "";
     }
@@ -388,8 +391,9 @@ const handleNext = async () => {
 
     const saved = readJson(LOCATION_KEY);
     let region = saved?.region || "";
-    if (!region && form.location) {
-        region = await resolveRegionName(form.location);
+    // 补全省市区(旧缓存可能只有区县)
+    if (form.location && (!region || !/^(北京|天津|上海|重庆|香港|澳门)|省|自治区/.test(region))) {
+        region = (await resolveRegionName(form.location)) || region;
     }
     if (!region) {
         ElMessage.warning("无法识别种植点位所属地区,请重新选择");

+ 10 - 7
src/views/old_mini/entry_information/selectLocation.vue

@@ -91,15 +91,18 @@ async function fetchAdcodeByCoordinate(coordinate) {
             location: `${coordinate[1]},${coordinate[0]}`,
         });
         const adcode = result?.ad_info?.adcode;
-        const region =
-            result?.ad_info?.district ||
-            result?.ad_info?.city ||
-            result?.address_component?.district ||
-            result?.address_component?.city ||
-            "";
+        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 {
             adcode: adcode != null && adcode !== "" ? String(adcode) : "",
-            region: region || "",
+            region: parts.join("") || district || city || province || "",
         };
     } catch {
         return { adcode: "", region: "" };

+ 2 - 2
src/views/old_mini/growth_report/components/CropAlertPanel.vue

@@ -260,7 +260,7 @@ watch(
 const alertCards = computed(() => [
     {
         id: "warning",
-        title: props.weatherRisk || "具体预警",
+        title: `未来预警: ${props.weatherRisk || "具体预警"}`,
         icon: weatherIcon,
         content: "详情体预警体预警体预警体预警体预警体预详情详情详情详情详情详情详情详情详情详情",
         patrolTip: "",
@@ -268,7 +268,7 @@ const alertCards = computed(() => [
     {
         id: 2,
         type: "abnormal",
-        title: props.weatherStress || "某某胁迫",
+        title: `当下胁迫: ${props.weatherStress || "某某胁迫"}`,
         icon: weatherIcon,
         content: "详情详情详情具体预警具体预警情详情详详情详情详情详情详情详情",
         patrolTip: "异常态势巡园要点",