|
@@ -22,71 +22,48 @@
|
|
|
<span class="growth-hero__tag growth-hero__tag--zone">{{ zoneName }}</span>
|
|
<span class="growth-hero__tag growth-hero__tag--zone">{{ zoneName }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="growth-hero__reason">{{ reason }}</div>
|
|
<div class="growth-hero__reason">{{ reason }}</div>
|
|
|
- </div>
|
|
|
|
|
|
|
+ </div>
|
|
|
<div class="growth-hero__share" @click="handleShare">
|
|
<div class="growth-hero__share" @click="handleShare">
|
|
|
<Icon name="share" />
|
|
<Icon name="share" />
|
|
|
<span>{{ t("agriFile.forward") }}</span>
|
|
<span>{{ t("agriFile.forward") }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <template v-if="!isAbnormal">
|
|
|
|
|
- <div class="growth-content">
|
|
|
|
|
- <div class="growth-content__title">{{ t("agriFile.agriAssessment") }}</div>
|
|
|
|
|
- <div class="growth-content__desc">{{ assessmentDesc }}</div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="interact-card">
|
|
|
|
|
- <div class="interact-card__head">
|
|
|
|
|
- <div class="interact-card__tab">
|
|
|
|
|
- <img class="interact-card__star" src="@/assets/img/agricultural/start.png" alt="" />
|
|
|
|
|
- <span>{{ t("agriFile.interactQuestion") }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="interact-card__qa">
|
|
|
|
|
- <div class="interact-card__question">{{ interactProblem }}</div>
|
|
|
|
|
- <div class="interact-card__options">
|
|
|
|
|
- <div v-for="item in interactOptions" :key="item.id" class="interact-option"
|
|
|
|
|
- :class="{ selected: selectedOptionId === item.id }" @click="selectedOptionId = item.id">
|
|
|
|
|
- <span class="interact-option__text">{{ item.name }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="interact-card__submit" @click="handleSubmit">{{ t("agriFile.submit") }}</div>
|
|
|
|
|
|
|
+ <div class="growth-content">
|
|
|
|
|
+ <div class="growth-content__title">{{ t("agriFile.agriAssessment") }}</div>
|
|
|
|
|
+ <div class="growth-content__desc">{{ assessmentDesc }}</div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="interact-card">
|
|
|
|
|
+ <div class="interact-card__head">
|
|
|
|
|
+ <div class="interact-card__tab">
|
|
|
|
|
+ <img class="interact-card__star" src="@/assets/img/agricultural/start.png" alt="" />
|
|
|
|
|
+ <span>{{ t("agriFile.interactQuestion") }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <!-- <div class="interact-card__ref">
|
|
|
|
|
- <span class="interact-card__ref-label">{{ t("agriFile.referenceImage") }}</span>
|
|
|
|
|
- <photo-provider :photo-closable="true">
|
|
|
|
|
- <photo-consumer :src="guideImage">
|
|
|
|
|
- <img class="interact-card__ref-img" :src="guideImage" alt="" />
|
|
|
|
|
- </photo-consumer>
|
|
|
|
|
- </photo-provider>
|
|
|
|
|
- </div> -->
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="guide-card">
|
|
|
|
|
- <div class="guide-title">{{ t("agriFile.patrolGuide") }}</div>
|
|
|
|
|
- <photo-provider :photo-closable="true">
|
|
|
|
|
- <photo-consumer :src="guideImage">
|
|
|
|
|
- <img class="guide-card__img" :src="guideImage" alt="" />
|
|
|
|
|
- </photo-consumer>
|
|
|
|
|
- </photo-provider>
|
|
|
|
|
</div>
|
|
</div>
|
|
|
- </template>
|
|
|
|
|
- <div v-else>
|
|
|
|
|
- <div class="situation-card__head" v-for="item in situationList" :key="item.nameKey">
|
|
|
|
|
- <div class="situation-card__name">
|
|
|
|
|
- <img class="situation-card__icon" src="@/assets/img/agricultural/gaojin.png" alt="" />
|
|
|
|
|
- <span>{{ t(item.nameKey) }}</span>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="situation-card__assess">
|
|
|
|
|
- <div class="situation-card__assess-title">{{ t("agriFile.agriAssessment") }}</div>
|
|
|
|
|
- <div class="situation-card__assess-desc">{{ t("agriFile.agriAssessmentDesc") }}</div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="situation-card__guide">
|
|
|
|
|
- <div class="guide-title">{{ t("agriFile.patrolGuide") }}</div>
|
|
|
|
|
- <div class="situation-card__guide-box">
|
|
|
|
|
- <img :src="guideImage" alt="" />
|
|
|
|
|
|
|
+ <div class="interact-card__qa">
|
|
|
|
|
+ <div class="interact-card__question">{{ interactProblem }}</div>
|
|
|
|
|
+ <div class="interact-card__options">
|
|
|
|
|
+ <div
|
|
|
|
|
+ v-for="item in interactOptions"
|
|
|
|
|
+ :key="item.id"
|
|
|
|
|
+ class="interact-option"
|
|
|
|
|
+ :class="{ selected: selectedOptionId === item.id }"
|
|
|
|
|
+ @click="selectedOptionId = item.id"
|
|
|
|
|
+ >
|
|
|
|
|
+ <span class="interact-option__text">{{ item.name }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ <div class="interact-card__submit" @click="handleSubmit">{{ t("agriFile.submit") }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ <div class="guide-card">
|
|
|
|
|
+ <div class="guide-title">{{ t("agriFile.patrolGuide") }}</div>
|
|
|
|
|
+ <photo-provider :photo-closable="true">
|
|
|
|
|
+ <photo-consumer :src="guideImage">
|
|
|
|
|
+ <img class="guide-card__img" :src="guideImage" alt="" />
|
|
|
|
|
+ </photo-consumer>
|
|
|
|
|
+ </photo-provider>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="guide-card__upload" @click="handleUploadClick">
|
|
<div class="guide-card__upload" @click="handleUploadClick">
|
|
|
<el-icon>
|
|
<el-icon>
|
|
@@ -95,7 +72,13 @@
|
|
|
<span>{{ t("agriFile.uploadPhoto") }}</span>
|
|
<span>{{ t("agriFile.uploadPhoto") }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<album-upload-popup v-model:show="showUploadPopup" @confirm="handleUploadConfirm" />
|
|
<album-upload-popup v-model:show="showUploadPopup" @confirm="handleUploadConfirm" />
|
|
|
- <tip-popup v-model:show="showSuccessPopup" type="executeSuccess" text="您已上传成功" text2="请等待诊断报告生成" hideBtn>
|
|
|
|
|
|
|
+ <tip-popup
|
|
|
|
|
+ v-model:show="showSuccessPopup"
|
|
|
|
|
+ type="executeSuccess"
|
|
|
|
|
+ text="您已上传成功"
|
|
|
|
|
+ text2="请等待诊断报告生成"
|
|
|
|
|
+ hideBtn
|
|
|
|
|
+ >
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
<div class="bottom-btn-container">
|
|
<div class="bottom-btn-container">
|
|
|
<div class="bottom-btn primary-btn" @click="handleComplete">完成</div>
|
|
<div class="bottom-btn primary-btn" @click="handleComplete">完成</div>
|
|
@@ -107,9 +90,9 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
|
-import { computed, nextTick, onActivated, onMounted, ref } from "vue";
|
|
|
|
|
|
|
+import { computed, nextTick, onActivated, ref } from "vue";
|
|
|
import { useRoute, useRouter } from "vue-router";
|
|
import { useRoute, useRouter } from "vue-router";
|
|
|
-import { Icon } from 'vant';
|
|
|
|
|
|
|
+import { Icon } from "vant";
|
|
|
import { ElMessage } from "element-plus";
|
|
import { ElMessage } from "element-plus";
|
|
|
import customHeader from "@/components/customHeader.vue";
|
|
import customHeader from "@/components/customHeader.vue";
|
|
|
import albumUploadPopup from "../components/albumUploadPopup.vue";
|
|
import albumUploadPopup from "../components/albumUploadPopup.vue";
|
|
@@ -123,24 +106,21 @@ const { t } = useI18n();
|
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
|
|
|
|
|
-const isAbnormal = computed(() => route.query.type === "abnormal");
|
|
|
|
|
-const pageTitle = computed(() => route.query.pageName || "巡园要点");
|
|
|
|
|
-
|
|
|
|
|
-const id = computed(() => route.query.id);
|
|
|
|
|
|
|
+// ---------- 常量 ----------
|
|
|
|
|
+const DEFAULT_GUIDE_IMAGE = require("@/assets/img/agricultural/patrol-guide.png");
|
|
|
|
|
|
|
|
-function isTruthyFlag(value) {
|
|
|
|
|
- return value === 1 || value === "1" || value === true || value === "true";
|
|
|
|
|
-}
|
|
|
|
|
|
|
+// ---------- 页面状态 ----------
|
|
|
|
|
+const interactTasks = ref([]);
|
|
|
|
|
+const currentTaskIndex = ref(0);
|
|
|
|
|
+const selectedOptionId = ref(null);
|
|
|
|
|
+const showUploadPopup = ref(false);
|
|
|
|
|
+const showSuccessPopup = ref(false);
|
|
|
|
|
+const showLeavePopup = ref(false);
|
|
|
|
|
+const needDraw = ref(true); // status≠1 时需先勾画种植范围
|
|
|
|
|
|
|
|
-function parseMaybeJson(value) {
|
|
|
|
|
- if (value == null || value === "") return null;
|
|
|
|
|
- if (typeof value === "object") return value;
|
|
|
|
|
- try {
|
|
|
|
|
- return JSON.parse(value);
|
|
|
|
|
- } catch {
|
|
|
|
|
- return null;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
|
|
+// ---------- 计算属性 ----------
|
|
|
|
|
+const pageTitle = computed(() => route.query.pageName || t("agriFile.patrolGrowthTitle"));
|
|
|
|
|
+const id = computed(() => route.query.id);
|
|
|
|
|
|
|
|
/** 通过分享进入:无返回箭头 */
|
|
/** 通过分享进入:无返回箭头 */
|
|
|
const isFromShare = computed(() => {
|
|
const isFromShare = computed(() => {
|
|
@@ -153,20 +133,6 @@ const isFromShare = computed(() => {
|
|
|
return false;
|
|
return false;
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-const DEFAULT_GUIDE_IMAGE = require("@/assets/img/agricultural/patrol-guide.png");
|
|
|
|
|
-
|
|
|
|
|
-function resolveImageUrl(path) {
|
|
|
|
|
- if (!path) return "";
|
|
|
|
|
- const text = String(path).trim();
|
|
|
|
|
- if (!text) return "";
|
|
|
|
|
- if (/^https?:\/\//i.test(text)) return text;
|
|
|
|
|
- return base_img_url2 + text.replace(/^\//, "");
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-const interactTasks = ref([]);
|
|
|
|
|
-const currentTaskIndex = ref(0);
|
|
|
|
|
-const selectedOptionId = ref(null);
|
|
|
|
|
-
|
|
|
|
|
const currentTask = computed(() => interactTasks.value[currentTaskIndex.value] || null);
|
|
const currentTask = computed(() => interactTasks.value[currentTaskIndex.value] || null);
|
|
|
const currentContent = computed(() => currentTask.value?.interact_content || {});
|
|
const currentContent = computed(() => currentTask.value?.interact_content || {});
|
|
|
|
|
|
|
@@ -176,10 +142,7 @@ const theme = computed(
|
|
|
const reason = computed(
|
|
const reason = computed(
|
|
|
() => currentContent.value.interact_theme || t("agriFile.interactReason")
|
|
() => currentContent.value.interact_theme || t("agriFile.interactReason")
|
|
|
);
|
|
);
|
|
|
-const level = computed(
|
|
|
|
|
- // () => currentTask.value?.weather_risk || t("agriFile.riskLevel2")
|
|
|
|
|
- () => t("agriFile.riskLevel2")
|
|
|
|
|
-);
|
|
|
|
|
|
|
+const level = computed(() => t("agriFile.riskLevel2"));
|
|
|
const zoneName = computed(() => t("agriFile.zoneOne"));
|
|
const zoneName = computed(() => t("agriFile.zoneOne"));
|
|
|
const assessmentDesc = computed(
|
|
const assessmentDesc = computed(
|
|
|
() => currentContent.value.interact_explain || t("agriFile.agriAssessmentDesc")
|
|
() => currentContent.value.interact_explain || t("agriFile.agriAssessmentDesc")
|
|
@@ -189,9 +152,7 @@ const interactProblem = computed(
|
|
|
);
|
|
);
|
|
|
const guideImage = computed(
|
|
const guideImage = computed(
|
|
|
() => resolveImageUrl(currentContent.value.guide_url) || DEFAULT_GUIDE_IMAGE
|
|
() => resolveImageUrl(currentContent.value.guide_url) || DEFAULT_GUIDE_IMAGE
|
|
|
- // () => resolveImageUrl('感知_玉米_4_32.png') || DEFAULT_GUIDE_IMAGE
|
|
|
|
|
);
|
|
);
|
|
|
-
|
|
|
|
|
const interactOptions = computed(() => {
|
|
const interactOptions = computed(() => {
|
|
|
const options = currentContent.value.interact_options;
|
|
const options = currentContent.value.interact_options;
|
|
|
if (!Array.isArray(options)) return [];
|
|
if (!Array.isArray(options)) return [];
|
|
@@ -201,6 +162,40 @@ const interactOptions = computed(() => {
|
|
|
}));
|
|
}));
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+// ---------- 工具函数 ----------
|
|
|
|
|
+function isTruthyFlag(value) {
|
|
|
|
|
+ return value === 1 || value === "1" || value === true || value === "true";
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function parseMaybeJson(value) {
|
|
|
|
|
+ if (value == null || value === "") return null;
|
|
|
|
|
+ if (typeof value === "object") return value;
|
|
|
|
|
+ try {
|
|
|
|
|
+ return JSON.parse(value);
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function resolveImageUrl(path) {
|
|
|
|
|
+ if (!path) return "";
|
|
|
|
|
+ const text = String(path).trim();
|
|
|
|
|
+ if (!text) return "";
|
|
|
|
|
+ if (/^https?:\/\//i.test(text)) return text;
|
|
|
|
|
+ return base_img_url2 + text.replace(/^\//, "");
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function getSelectedFarm() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ return JSON.parse(localStorage.getItem("selectedFarmData") || "{}");
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ return {};
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const hasAnswered = () => selectedOptionId.value != null;
|
|
|
|
|
+
|
|
|
|
|
+// ---------- 业务逻辑 ----------
|
|
|
const applyTaskIndex = (index) => {
|
|
const applyTaskIndex = (index) => {
|
|
|
currentTaskIndex.value = index;
|
|
currentTaskIndex.value = index;
|
|
|
selectedOptionId.value = null;
|
|
selectedOptionId.value = null;
|
|
@@ -218,14 +213,28 @@ const fetchInternalInteractTasks = async () => {
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const showUploadPopup = ref(false);
|
|
|
|
|
-const showSuccessPopup = ref(false);
|
|
|
|
|
-const showLeavePopup = ref(false);
|
|
|
|
|
-const situationList = [
|
|
|
|
|
- { nameKey: "agriFile.growthAbnormal" },
|
|
|
|
|
- // { nameKey: "agriFile.rootAbnormal" },
|
|
|
|
|
-];
|
|
|
|
|
|
|
+/** status=1 有范围无需勾画;status=0 无范围需要勾画 */
|
|
|
|
|
+const fetchZoneRangeStatus = async () => {
|
|
|
|
|
+ const farm = getSelectedFarm();
|
|
|
|
|
+ const farmId = farm.farm_id ?? farm.id;
|
|
|
|
|
+ const zoneId = id.value || farm.zone_id || farm.zoneId;
|
|
|
|
|
+ if (farmId == null || farmId === "" || zoneId == null || zoneId === "") {
|
|
|
|
|
+ needDraw.value = true;
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await VE_API.questionnaire.checkZoneRange({
|
|
|
|
|
+ farm_id: farmId,
|
|
|
|
|
+ zone_id: zoneId,
|
|
|
|
|
+ });
|
|
|
|
|
+ needDraw.value = Number(res?.data?.status) !== 1;
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ console.warn("[growthTrack] checkZoneRange failed", e);
|
|
|
|
|
+ needDraw.value = true;
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
|
|
+// ---------- 事件处理 / 生命周期 ----------
|
|
|
const handleShare = () => {
|
|
const handleShare = () => {
|
|
|
const query = {
|
|
const query = {
|
|
|
askInfo: { title: "转发巡园要点", content: "是否分享给好友" },
|
|
askInfo: { title: "转发巡园要点", content: "是否分享给好友" },
|
|
@@ -233,8 +242,8 @@ const handleShare = () => {
|
|
|
targetUrl: "growth_track",
|
|
targetUrl: "growth_track",
|
|
|
paramsPage: JSON.stringify({
|
|
paramsPage: JSON.stringify({
|
|
|
id: id.value,
|
|
id: id.value,
|
|
|
- type: route.query.type,
|
|
|
|
|
fromShare: 1,
|
|
fromShare: 1,
|
|
|
|
|
+ ...(route.query.pageName ? { pageName: route.query.pageName } : {}),
|
|
|
}),
|
|
}),
|
|
|
imageUrl: "https://birdseye-img.sysuimars.com/temp/field.png",
|
|
imageUrl: "https://birdseye-img.sysuimars.com/temp/field.png",
|
|
|
};
|
|
};
|
|
@@ -257,71 +266,20 @@ const handleSubmit = () => {
|
|
|
ElMessage.success(t("agriFile.submitSuccess"));
|
|
ElMessage.success(t("agriFile.submitSuccess"));
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const needDraw = ref(true);
|
|
|
|
|
-
|
|
|
|
|
-const getSelectedFarm = () => {
|
|
|
|
|
- try {
|
|
|
|
|
- return JSON.parse(localStorage.getItem("selectedFarmData") || "{}");
|
|
|
|
|
- } catch {
|
|
|
|
|
- return {};
|
|
|
|
|
- }
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-/** status=1 有范围无需勾画;status=0 无范围需要勾画 */
|
|
|
|
|
-const fetchZoneRangeStatus = async () => {
|
|
|
|
|
- const farm = getSelectedFarm();
|
|
|
|
|
- const farmId = farm.farm_id ?? farm.id;
|
|
|
|
|
- const zoneId = id.value || farm.zone_id || farm.zoneId;
|
|
|
|
|
- if (farmId == null || farmId === "" || zoneId == null || zoneId === "") {
|
|
|
|
|
- needDraw.value = true;
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- try {
|
|
|
|
|
- const res = await VE_API.questionnaire.checkZoneRange({
|
|
|
|
|
- farm_id: farmId,
|
|
|
|
|
- zone_id: zoneId,
|
|
|
|
|
- });
|
|
|
|
|
- const status = Number(res?.data?.status);
|
|
|
|
|
- needDraw.value = status !== 1;
|
|
|
|
|
- } catch (e) {
|
|
|
|
|
- console.warn("[growthTrack] checkZoneRange failed", e);
|
|
|
|
|
- needDraw.value = true;
|
|
|
|
|
- }
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-/** 先跳小程序校验定位;通过后由小程序直接打开勾画/病虫害/上传目标页 */
|
|
|
|
|
|
|
+/** 需勾画则先画范围;否则直接上传 */
|
|
|
const handleUploadClick = () => {
|
|
const handleUploadClick = () => {
|
|
|
if (needDraw.value) {
|
|
if (needDraw.value) {
|
|
|
router.push({
|
|
router.push({
|
|
|
path: "/add_zone",
|
|
path: "/add_zone",
|
|
|
query: {
|
|
query: {
|
|
|
type: "farm",
|
|
type: "farm",
|
|
|
- targetUrl: isAbnormal.value ? "/pest_interact" : "/growth_track",
|
|
|
|
|
- ...(isAbnormal.value ? { isAbnormal: "true" } : {}),
|
|
|
|
|
|
|
+ targetUrl: "/growth_track",
|
|
|
...(route.query.id ? { trackId: route.query.id } : {}),
|
|
...(route.query.id ? { trackId: route.query.id } : {}),
|
|
|
- ...(route.query.type ? { trackType: route.query.type } : {}),
|
|
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
- if (isAbnormal.value) {
|
|
|
|
|
- router.push({
|
|
|
|
|
- path: "/pest_interact",
|
|
|
|
|
- });
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
showUploadPopup.value = true;
|
|
showUploadPopup.value = true;
|
|
|
- // const query = [
|
|
|
|
|
- // `needDraw=${needDraw.value ? 1 : 0}`,
|
|
|
|
|
- // `isAbnormal=${isAbnormal.value ? 1 : 0}`,
|
|
|
|
|
- // route.query.id ? `id=${encodeURIComponent(String(route.query.id))}` : "",
|
|
|
|
|
- // route.query.type ? `type=${encodeURIComponent(String(route.query.type))}` : "",
|
|
|
|
|
- // ]
|
|
|
|
|
- // .filter(Boolean)
|
|
|
|
|
- // .join("&");
|
|
|
|
|
- // wx.miniProgram.navigateTo({
|
|
|
|
|
- // url: `/pages/subPages/farm_location_check/index?${query}`,
|
|
|
|
|
- // });
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const handleUploadConfirm = async ({ images, date } = {}) => {
|
|
const handleUploadConfirm = async ({ images, date } = {}) => {
|
|
@@ -355,14 +313,8 @@ const handleComplete = () => {
|
|
|
router.replace("/agri_file");
|
|
router.replace("/agri_file");
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const handleContinueUpload = () => {
|
|
|
|
|
- showSuccessPopup.value = false;
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-const hasAnswered = () => selectedOptionId.value != null;
|
|
|
|
|
-
|
|
|
|
|
const handleBack = () => {
|
|
const handleBack = () => {
|
|
|
- if (!isAbnormal.value && !hasAnswered()) {
|
|
|
|
|
|
|
+ if (!hasAnswered()) {
|
|
|
showLeavePopup.value = true;
|
|
showLeavePopup.value = true;
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -373,17 +325,9 @@ const confirmLeave = () => {
|
|
|
router.back();
|
|
router.back();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-// onMounted(() => {
|
|
|
|
|
-// if (!isAbnormal.value) {
|
|
|
|
|
-// fetchInternalInteractTasks();
|
|
|
|
|
-// }
|
|
|
|
|
-// });
|
|
|
|
|
-
|
|
|
|
|
onActivated(() => {
|
|
onActivated(() => {
|
|
|
fetchZoneRangeStatus();
|
|
fetchZoneRangeStatus();
|
|
|
- if (!isAbnormal.value) {
|
|
|
|
|
- fetchInternalInteractTasks();
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ fetchInternalInteractTasks();
|
|
|
if (route.query.showUpload !== "1") return;
|
|
if (route.query.showUpload !== "1") return;
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
|
showUploadPopup.value = true;
|
|
showUploadPopup.value = true;
|
|
@@ -448,21 +392,13 @@ onActivated(() => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
&__tag--level {
|
|
&__tag--level {
|
|
|
- color: #FF6A6A;
|
|
|
|
|
|
|
+ color: #ff6a6a;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
&__tag--zone {
|
|
&__tag--zone {
|
|
|
color: #2199f8;
|
|
color: #2199f8;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- &__tags {
|
|
|
|
|
- margin-top: 10px;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- gap: 8px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
&__share {
|
|
&__share {
|
|
|
flex: none;
|
|
flex: none;
|
|
|
display: flex;
|
|
display: flex;
|
|
@@ -485,14 +421,14 @@ onActivated(() => {
|
|
|
background: #fff;
|
|
background: #fff;
|
|
|
|
|
|
|
|
&__title {
|
|
&__title {
|
|
|
- color: #4F4F4F;
|
|
|
|
|
|
|
+ color: #4f4f4f;
|
|
|
font-size: 16px;
|
|
font-size: 16px;
|
|
|
font-family: "PangMenZhengDao";
|
|
font-family: "PangMenZhengDao";
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
&__desc {
|
|
&__desc {
|
|
|
margin-top: 4px;
|
|
margin-top: 4px;
|
|
|
- color: #9C9C9C;
|
|
|
|
|
|
|
+ color: #9c9c9c;
|
|
|
font-size: 14px;
|
|
font-size: 14px;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -535,7 +471,6 @@ onActivated(() => {
|
|
|
padding: 10px;
|
|
padding: 10px;
|
|
|
border-radius: 8px;
|
|
border-radius: 8px;
|
|
|
background: rgba(33, 153, 248, 0.1);
|
|
background: rgba(33, 153, 248, 0.1);
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
&__question {
|
|
&__question {
|
|
@@ -601,28 +536,6 @@ onActivated(() => {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- &__ref {
|
|
|
|
|
- position: relative;
|
|
|
|
|
- margin: 10px;
|
|
|
|
|
- border-radius: 8px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__ref-label {
|
|
|
|
|
- position: absolute;
|
|
|
|
|
- z-index: 1;
|
|
|
|
|
- padding: 3px 11px;
|
|
|
|
|
- border-radius: 8px 0 8px 0;
|
|
|
|
|
- background: rgba(0, 0, 0, 0.43);
|
|
|
|
|
- backdrop-filter: blur(5px);
|
|
|
|
|
- color: #fff;
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__ref-img {
|
|
|
|
|
- display: block;
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.guide-card__upload {
|
|
.guide-card__upload {
|
|
@@ -682,73 +595,6 @@ onActivated(() => {
|
|
|
margin-top: 8px;
|
|
margin-top: 8px;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- .situation-card {
|
|
|
|
|
- &__head {
|
|
|
|
|
- position: relative;
|
|
|
|
|
- z-index: 1;
|
|
|
|
|
- margin: 0 10px 12px;
|
|
|
|
|
- padding: 12px;
|
|
|
|
|
- border-radius: 10px;
|
|
|
|
|
- background: #fff;
|
|
|
|
|
-
|
|
|
|
|
- &:first-child {
|
|
|
|
|
- margin-top: -24px;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__name {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: stretch;
|
|
|
|
|
- gap: 10px;
|
|
|
|
|
- padding-bottom: 10px;
|
|
|
|
|
- border-bottom: 1px solid rgba(0, 0, 0, 0.08);
|
|
|
|
|
- color: #2199f8;
|
|
|
|
|
- font-size: 16px;
|
|
|
|
|
- font-weight: 500;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__icon {
|
|
|
|
|
- width: 18px;
|
|
|
|
|
- height: 18px;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__assess {
|
|
|
|
|
- margin-top: 10px;
|
|
|
|
|
- padding: 10px;
|
|
|
|
|
- border-radius: 8px;
|
|
|
|
|
- background: #F9F9F9;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__assess-title {
|
|
|
|
|
- color: #4F4F4F;
|
|
|
|
|
- font-size: 16px;
|
|
|
|
|
- margin-top: -3px;
|
|
|
|
|
- font-family: "PangMenZhengDao";
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__assess-desc {
|
|
|
|
|
- margin-top: 4px;
|
|
|
|
|
- color: #9C9C9C;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__guide {
|
|
|
|
|
- margin-top: 10px;
|
|
|
|
|
- padding: 10px;
|
|
|
|
|
- border: 1px solid rgba(33, 153, 248, 0.2);
|
|
|
|
|
- border-radius: 8px;
|
|
|
|
|
- background: linear-gradient(360deg, #FFFFFF 90.33%, #ABD8FC 116.61%, #2199F8 148.55%);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- &__guide-box {
|
|
|
|
|
- margin-top: 12px;
|
|
|
|
|
-
|
|
|
|
|
- img {
|
|
|
|
|
- display: block;
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.bottom-btn-container {
|
|
.bottom-btn-container {
|
|
@@ -767,11 +613,6 @@ onActivated(() => {
|
|
|
font-weight: 500;
|
|
font-weight: 500;
|
|
|
text-align: center;
|
|
text-align: center;
|
|
|
|
|
|
|
|
- &.secondary-btn {
|
|
|
|
|
- color: #b1b1b1;
|
|
|
|
|
- border: 1px solid #eaeaea;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
&.primary-btn {
|
|
&.primary-btn {
|
|
|
flex: 1;
|
|
flex: 1;
|
|
|
background: #2199f8;
|
|
background: #2199f8;
|