|
@@ -62,19 +62,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <div class="growth-top__content" :class="{'space-pos': stressMenuItems.length}">
|
|
|
|
|
- <!-- 左侧:气象底图图层菜单(有农场 getHomeMapCalc / 无农场 getHomeMapCalcByCounty) -->
|
|
|
|
|
- <div v-if="stressMenuItems.length" class="side-menu side-menu--left">
|
|
|
|
|
- <div v-for="item in stressMenuItems" :key="item.key" class="side-menu__item"
|
|
|
|
|
- :class="{ active: activeMenuKey === item.key }" @click="handleSelectMenu(item.key)">
|
|
|
|
|
- <img class="side-menu__icon" :src="base_img_url3 + item.icon_path" alt="" />
|
|
|
|
|
- <div class="side-menu__text">
|
|
|
|
|
- <span>{{ item.line1 }}</span>
|
|
|
|
|
- <span>{{ item.line2 }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
|
|
+ <div class="growth-top__content">
|
|
|
<div class="invite-group">
|
|
<div class="invite-group">
|
|
|
<div class="invite-btn" @click="handleLocateToCenter">
|
|
<div class="invite-btn" @click="handleLocateToCenter">
|
|
|
<img class="current-icon" src="@/assets/img/home/current.png" alt="">
|
|
<img class="current-icon" src="@/assets/img/home/current.png" alt="">
|
|
@@ -93,12 +81,8 @@
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
- <div v-if="activeLegendUrl" class="map-legend map-legend--image" :style="{ bottom: `${inviteBottom + 10}px` }">
|
|
|
|
|
- <img class="map-legend__img" :src="activeLegendUrl" alt="" />
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
<crop-alert-panel :crop-name="currentCropName" :farm-id="selectedFarmId" :county-code="countyCode"
|
|
<crop-alert-panel :crop-name="currentCropName" :farm-id="selectedFarmId" :county-code="countyCode"
|
|
|
- @zone-change="handleZoneChange" @height-change="handlePanelHeightChange" />
|
|
|
|
|
|
|
+ @zone-change="handleZoneChange" />
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- 恢复种植弹窗 -->
|
|
<!-- 恢复种植弹窗 -->
|
|
@@ -117,7 +101,6 @@ import GrowthReportMap from "./growthReportMap.js";
|
|
|
import CropAlertPanel from "./components/CropAlertPanel.vue";
|
|
import CropAlertPanel from "./components/CropAlertPanel.vue";
|
|
|
import wx from "weixin-js-sdk";
|
|
import wx from "weixin-js-sdk";
|
|
|
|
|
|
|
|
-import { base_img_url3 } from "@/api/config";
|
|
|
|
|
import restorePlantingPopup from "@/components/popup/restorePlantingPopup.vue";
|
|
import restorePlantingPopup from "@/components/popup/restorePlantingPopup.vue";
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
@@ -125,10 +108,9 @@ const router = useRouter();
|
|
|
const DEFAULT_MAP_POINT = "POINT(113.6142086995688 23.585836479509055)";
|
|
const DEFAULT_MAP_POINT = "POINT(113.6142086995688 23.585836479509055)";
|
|
|
const LOCATION_SESSION_KEY = "GROWTH_REPORT_LOCATION";
|
|
const LOCATION_SESSION_KEY = "GROWTH_REPORT_LOCATION";
|
|
|
const MAP_POINT_STORAGE_KEY = "GROWTH_REPORT_MAP_POINT";
|
|
const MAP_POINT_STORAGE_KEY = "GROWTH_REPORT_MAP_POINT";
|
|
|
-/** 无农场时逆地理得到的区县码,供底图 / 点位预警共用 */
|
|
|
|
|
|
|
+/** 无农场时逆地理得到的区县码,供点位预警使用 */
|
|
|
const COUNTY_CODE_STORAGE_KEY = "GROWTH_REPORT_COUNTY_CODE";
|
|
const COUNTY_CODE_STORAGE_KEY = "GROWTH_REPORT_COUNTY_CODE";
|
|
|
|
|
|
|
|
-const menuIcon = require("@/assets/img/common/farm-active.png");
|
|
|
|
|
const periodIcon = require("@/assets/img/agricultural/period.png");
|
|
const periodIcon = require("@/assets/img/agricultural/period.png");
|
|
|
const lightningIcon = require("@/assets/img/agricultural/lightning.png");
|
|
const lightningIcon = require("@/assets/img/agricultural/lightning.png");
|
|
|
const soilIcon = require("@/assets/img/agricultural/soil.png");
|
|
const soilIcon = require("@/assets/img/agricultural/soil.png");
|
|
@@ -158,16 +140,6 @@ const currentCropName = computed(() => {
|
|
|
""
|
|
""
|
|
|
);
|
|
);
|
|
|
});
|
|
});
|
|
|
-/** 侧边气象图层菜单(有农场 getHomeMapCalc / 无农场 getHomeMapCalcByCounty) */
|
|
|
|
|
-const stressMenuItems = ref([]);
|
|
|
|
|
-const activeMenuKey = ref("");
|
|
|
|
|
-/** 当前选中图层图例图 */
|
|
|
|
|
-const activeLegendUrl = ref("");
|
|
|
|
|
-const panelHeight = ref(280);
|
|
|
|
|
-const inviteBottom = computed(() => panelHeight.value);
|
|
|
|
|
-/** 防止切换农场/分区时旧请求回写 */
|
|
|
|
|
-let mapCalcToken = 0;
|
|
|
|
|
-
|
|
|
|
|
const getSelectedFarm = () => {
|
|
const getSelectedFarm = () => {
|
|
|
try {
|
|
try {
|
|
|
return JSON.parse(localStorage.getItem("selectedFarmData") || "{}");
|
|
return JSON.parse(localStorage.getItem("selectedFarmData") || "{}");
|
|
@@ -285,7 +257,7 @@ const goAddZone = (type) => {
|
|
|
path: "/add_zone",
|
|
path: "/add_zone",
|
|
|
query: {
|
|
query: {
|
|
|
type,
|
|
type,
|
|
|
- isSuccessPopup: type === "farm" ? "1" : "0",
|
|
|
|
|
|
|
+ isSuccessPopup: "1",
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
@@ -523,132 +495,8 @@ function resolveCropCode(farm = getSelectedFarm()) {
|
|
|
return farm.category_code || farm.categorycode || farm.crop_code || farm.crop_type || "";
|
|
return farm.category_code || farm.categorycode || farm.crop_code || farm.crop_type || "";
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/** 本地 dem 路径转 mapimg 可访问地址:取文件名挂到 /mapimg/ */
|
|
|
|
|
-function resolveCalcAssetUrl(path) {
|
|
|
|
|
- if (!path) return "";
|
|
|
|
|
- const raw = String(path).trim();
|
|
|
|
|
- if (/^https?:\/\//i.test(raw)) return raw;
|
|
|
|
|
- const fileName = raw.replace(/\\/g, "/").split("/").filter(Boolean).pop();
|
|
|
|
|
- if (!fileName) return "";
|
|
|
|
|
- // /home/dem_ditu/输出/从化区_xxx.png → https://feiniao-farm-h5-v3.feiniaotech.com/mapimg/从化区_xxx.png
|
|
|
|
|
- return `https://feiniao-farm-h5-v3.feiniaotech.com/mapimg/${encodeURIComponent(fileName)}`;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/** risk_name 拆成两行展示,如「高温高湿」→ 高温 / 高湿 */
|
|
|
|
|
-function splitRiskName(name) {
|
|
|
|
|
- const text = String(name || "").trim();
|
|
|
|
|
- if (!text) return { line1: "-", line2: "" };
|
|
|
|
|
- if (text.length <= 2) return { line1: text, line2: "" };
|
|
|
|
|
- const mid = Math.ceil(text.length / 2);
|
|
|
|
|
- return { line1: text.slice(0, mid), line2: text.slice(mid) };
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-function mapCalcRecordToMenuItem(record) {
|
|
|
|
|
- const { line1, line2 } = splitRiskName(record?.risk_name);
|
|
|
|
|
- const bounds = Array.isArray(record?.bounds) ? record.bounds.map(Number) : [];
|
|
|
|
|
- const extent =
|
|
|
|
|
- bounds.length === 4 && bounds.every((n) => Number.isFinite(n)) ? bounds : null;
|
|
|
|
|
- return {
|
|
|
|
|
- key: String(record?.id ?? record?.risk_name ?? ""),
|
|
|
|
|
- line1,
|
|
|
|
|
- line2,
|
|
|
|
|
- icon_path: record?.icon_path || menuIcon,
|
|
|
|
|
- mapUrl: resolveCalcAssetUrl(record?.png_path),
|
|
|
|
|
- extent,
|
|
|
|
|
- legendUrl: resolveCalcAssetUrl(record?.legend_path),
|
|
|
|
|
- };
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-function clearMapCalcState() {
|
|
|
|
|
- stressMenuItems.value = [];
|
|
|
|
|
- activeMenuKey.value = "";
|
|
|
|
|
- activeLegendUrl.value = "";
|
|
|
|
|
- growthReportMap.hideRemoteImage();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/** 按侧边菜单叠加对应气象底图 + 图例 */
|
|
|
|
|
-function applyMenuOverlay(key) {
|
|
|
|
|
- const item = stressMenuItems.value.find((m) => m.key === key);
|
|
|
|
|
- if (!item?.mapUrl || !item.extent || !growthReportMap.kmap) {
|
|
|
|
|
- growthReportMap.hideRemoteImage();
|
|
|
|
|
- activeLegendUrl.value = "";
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- growthReportMap.showRemoteImage(item.mapUrl, item.extent);
|
|
|
|
|
- activeLegendUrl.value = item.legendUrl || "";
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-function applyMapCalcRecords(records) {
|
|
|
|
|
- stressMenuItems.value = records.map(mapCalcRecordToMenuItem).filter((item) => item.key);
|
|
|
|
|
- const first = stressMenuItems.value[0];
|
|
|
|
|
- if (first) {
|
|
|
|
|
- activeMenuKey.value = first.key;
|
|
|
|
|
- applyMenuOverlay(first.key);
|
|
|
|
|
- } else {
|
|
|
|
|
- clearMapCalcState();
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/** 无农场:按区县 adcode 拉气象底图 */
|
|
|
|
|
-async function fetchHomeMapCalcByCounty(countyCode) {
|
|
|
|
|
- const token = ++mapCalcToken;
|
|
|
|
|
- if (!countyCode) {
|
|
|
|
|
- clearMapCalcState();
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- try {
|
|
|
|
|
- const res = await VE_API.questionnaire.getHomeMapCalcByCounty({
|
|
|
|
|
- county_code: countyCode,
|
|
|
|
|
- });
|
|
|
|
|
- if (token !== mapCalcToken) return;
|
|
|
|
|
- const records = Array.isArray(res?.data?.records) ? res.data.records.slice(0, 3) : [];
|
|
|
|
|
- applyMapCalcRecords(records);
|
|
|
|
|
- } catch (e) {
|
|
|
|
|
- if (token !== mapCalcToken) return;
|
|
|
|
|
- console.warn("[growth_report] getHomeMapCalcByCounty failed", e);
|
|
|
|
|
- clearMapCalcState();
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-/** 有农场:按农场/分区拉气象底图 */
|
|
|
|
|
-async function fetchHomeMapCalc() {
|
|
|
|
|
- if (!hasSelectedFarm()) return;
|
|
|
|
|
-
|
|
|
|
|
- const token = ++mapCalcToken;
|
|
|
|
|
- const farm = getSelectedFarm();
|
|
|
|
|
- const farmId = selectedFarmId.value || farm.farm_id || farm.id;
|
|
|
|
|
- const zoneId = panelZoneId.value;
|
|
|
|
|
- const cropCode = resolveCropCode(farm);
|
|
|
|
|
- if (
|
|
|
|
|
- farmId == null ||
|
|
|
|
|
- farmId === "" ||
|
|
|
|
|
- zoneId == null ||
|
|
|
|
|
- zoneId === "" ||
|
|
|
|
|
- !cropCode
|
|
|
|
|
- ) {
|
|
|
|
|
- clearMapCalcState();
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- try {
|
|
|
|
|
- const res = await VE_API.questionnaire.getHomeMapCalc({
|
|
|
|
|
- farm_id: farmId,
|
|
|
|
|
- zone_id: zoneId,
|
|
|
|
|
- calc_date: formatToday(),
|
|
|
|
|
- crop_code: cropCode,
|
|
|
|
|
- });
|
|
|
|
|
- if (token !== mapCalcToken) return;
|
|
|
|
|
- const records = Array.isArray(res?.data?.records) ? res.data.records.slice(0, 3) : [];
|
|
|
|
|
- applyMapCalcRecords(records);
|
|
|
|
|
- } catch (e) {
|
|
|
|
|
- if (token !== mapCalcToken) return;
|
|
|
|
|
- console.warn("[growth_report] getHomeMapCalc failed", e);
|
|
|
|
|
- clearMapCalcState();
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
const handleZoneChange = (zoneId) => {
|
|
const handleZoneChange = (zoneId) => {
|
|
|
panelZoneId.value = zoneId != null && zoneId !== "" ? zoneId : null;
|
|
panelZoneId.value = zoneId != null && zoneId !== "" ? zoneId : null;
|
|
|
- fetchHomeMapCalc();
|
|
|
|
|
fetchFarmRangeStatus();
|
|
fetchFarmRangeStatus();
|
|
|
fetchInteractTask();
|
|
fetchInteractTask();
|
|
|
};
|
|
};
|
|
@@ -679,18 +527,16 @@ async function getLocationName(point = currentMapPoint.value) {
|
|
|
locationName.value = result?.address_component
|
|
locationName.value = result?.address_component
|
|
|
? result.address_component.city + result.address_component.district
|
|
? result.address_component.city + result.address_component.district
|
|
|
: (result?.address || "") + "";
|
|
: (result?.address || "") + "";
|
|
|
- // 无农场时用 adcode 拉区县气象底图,并同步给预警面板
|
|
|
|
|
|
|
+ // 无农场时用 adcode 同步给点位预警面板
|
|
|
if (!hasSelectedFarm()) {
|
|
if (!hasSelectedFarm()) {
|
|
|
const adcode = result?.ad_info?.adcode;
|
|
const adcode = result?.ad_info?.adcode;
|
|
|
if (adcode != null && adcode !== "") {
|
|
if (adcode != null && adcode !== "") {
|
|
|
const code = String(adcode);
|
|
const code = String(adcode);
|
|
|
countyCode.value = code;
|
|
countyCode.value = code;
|
|
|
localStorage.setItem(COUNTY_CODE_STORAGE_KEY, code);
|
|
localStorage.setItem(COUNTY_CODE_STORAGE_KEY, code);
|
|
|
- await fetchHomeMapCalcByCounty(code);
|
|
|
|
|
} else {
|
|
} else {
|
|
|
countyCode.value = "";
|
|
countyCode.value = "";
|
|
|
localStorage.removeItem(COUNTY_CODE_STORAGE_KEY);
|
|
localStorage.removeItem(COUNTY_CODE_STORAGE_KEY);
|
|
|
- clearMapCalcState();
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
@@ -714,14 +560,12 @@ const initMap = async () => {
|
|
|
growthReportMap.setMapPosition(coordinate);
|
|
growthReportMap.setMapPosition(coordinate);
|
|
|
}
|
|
}
|
|
|
await syncNoRangeGuide();
|
|
await syncNoRangeGuide();
|
|
|
- applyMenuOverlay(activeMenuKey.value);
|
|
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
const location = currentMapPoint.value || store.state.home.miniUserLocationPoint || DEFAULT_MAP_POINT;
|
|
const location = currentMapPoint.value || store.state.home.miniUserLocationPoint || DEFAULT_MAP_POINT;
|
|
|
currentMapPoint.value = location;
|
|
currentMapPoint.value = location;
|
|
|
growthReportMap.initMap(location, mapContainer.value);
|
|
growthReportMap.initMap(location, mapContainer.value);
|
|
|
await syncNoRangeGuide();
|
|
await syncNoRangeGuide();
|
|
|
- applyMenuOverlay(activeMenuKey.value);
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
function applySelectedLocation() {
|
|
function applySelectedLocation() {
|
|
@@ -792,19 +636,6 @@ const handleSwitchLocation = () => {
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const handleSelectMenu = (key) => {
|
|
|
|
|
- if (!key) return;
|
|
|
|
|
- // 再次点击同一项则关闭叠加
|
|
|
|
|
- if (activeMenuKey.value === key) {
|
|
|
|
|
- activeMenuKey.value = "";
|
|
|
|
|
- activeLegendUrl.value = "";
|
|
|
|
|
- growthReportMap.hideRemoteImage();
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- activeMenuKey.value = key;
|
|
|
|
|
- applyMenuOverlay(key);
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
const handleInvite = (type) => {
|
|
const handleInvite = (type) => {
|
|
|
const isService = type === "service";
|
|
const isService = type === "service";
|
|
|
let inviteName = "好友";
|
|
let inviteName = "好友";
|
|
@@ -828,10 +659,6 @@ const handleInvite = (type) => {
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const handlePanelHeightChange = (height) => {
|
|
|
|
|
- panelHeight.value = Number(height) || 0;
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
// syncSelectedFarmId();
|
|
// syncSelectedFarmId();
|
|
|
// syncMapFromSelectedFarm();
|
|
// syncMapFromSelectedFarm();
|
|
@@ -1069,64 +896,9 @@ onActivated(() => {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: flex-start;
|
|
align-items: flex-start;
|
|
|
justify-content: end;
|
|
justify-content: end;
|
|
|
- &.space-pos {
|
|
|
|
|
- justify-content: space-between;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .side-menu {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- gap: 12px;
|
|
|
|
|
- padding: 4px;
|
|
|
|
|
- border-radius: 10px;
|
|
|
|
|
- pointer-events: auto;
|
|
|
|
|
- background: #1b1b1d;
|
|
|
|
|
- box-sizing: border-box;
|
|
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.12);
|
|
|
|
|
-
|
|
|
|
|
- &__item {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- gap: 4px;
|
|
|
|
|
- width: 45px;
|
|
|
|
|
- color: #C1C1C1;
|
|
|
|
|
- padding: 5px 10px;
|
|
|
|
|
- box-sizing: border-box;
|
|
|
|
|
- cursor: pointer;
|
|
|
|
|
-
|
|
|
|
|
- &.active {
|
|
|
|
|
- color: #FFD489;
|
|
|
|
|
- background: #2C2C2C;
|
|
|
|
|
- border-radius: 6px;
|
|
|
|
|
-
|
|
|
|
|
- .side-menu__icon {
|
|
|
|
|
- opacity: 1;
|
|
|
|
|
- // filter: brightness(0) saturate(100%) invert(48%) sepia(98%) saturate(1805%) hue-rotate(178deg) brightness(98%) contrast(97%);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__icon {
|
|
|
|
|
- width: 21px;
|
|
|
|
|
- object-fit: contain;
|
|
|
|
|
- filter: grayscale(1);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__text {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- line-height: 14px;
|
|
|
|
|
- text-align: center;
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
.invite-group {
|
|
.invite-group {
|
|
|
pointer-events: none;
|
|
pointer-events: none;
|
|
|
|
|
|
|
@@ -1159,79 +931,6 @@ onActivated(() => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- .map-legend {
|
|
|
|
|
- position: fixed;
|
|
|
|
|
- right: 10px;
|
|
|
|
|
- z-index: 20;
|
|
|
|
|
- pointer-events: none;
|
|
|
|
|
- // transition: bottom 0.2s ease;
|
|
|
|
|
- // display: flex;
|
|
|
|
|
- // align-items: center;
|
|
|
|
|
- // gap: 10px;
|
|
|
|
|
- // box-sizing: border-box;
|
|
|
|
|
-
|
|
|
|
|
- &__img {
|
|
|
|
|
- display: block;
|
|
|
|
|
- max-width: 180px;
|
|
|
|
|
- max-height: 160px;
|
|
|
|
|
- object-fit: contain;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &--en {
|
|
|
|
|
- flex-direction: column;
|
|
|
|
|
- align-items: flex-start;
|
|
|
|
|
- gap: 6px;
|
|
|
|
|
- padding: 8px 10px;
|
|
|
|
|
- background: rgba(0, 0, 0, 0.72);
|
|
|
|
|
- border-radius: 6px;
|
|
|
|
|
-
|
|
|
|
|
- .map-legend__item {
|
|
|
|
|
- gap: 6px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .map-legend__pill {
|
|
|
|
|
- width: 18px;
|
|
|
|
|
- height: 4px;
|
|
|
|
|
- flex-shrink: 0;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- .map-legend__text {
|
|
|
|
|
- font-size: 11px;
|
|
|
|
|
- line-height: 1.2;
|
|
|
|
|
- white-space: nowrap;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__item {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- gap: 5px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__pill {
|
|
|
|
|
- width: 16px;
|
|
|
|
|
- height: 5px;
|
|
|
|
|
- border-radius: 10px;
|
|
|
|
|
-
|
|
|
|
|
- &--zone {
|
|
|
|
|
- background: #13a27f;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &--growth {
|
|
|
|
|
- background: #ff9138;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &--pest {
|
|
|
|
|
- background: #e62e2d;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__text {
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- color: #fff;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
.report-content {
|
|
.report-content {
|
|
|
position: relative;
|
|
position: relative;
|
|
|
height: 100%;
|
|
height: 100%;
|