|
@@ -8,22 +8,22 @@
|
|
|
<div class="report-content-wrap" v-if="hasReport" v-loading="loading">
|
|
<div class="report-content-wrap" v-if="hasReport" v-loading="loading">
|
|
|
<swipe class="my-swipe" :loop="false" indicator-color="white" @change="handleSwipeChange">
|
|
<swipe class="my-swipe" :loop="false" indicator-color="white" @change="handleSwipeChange">
|
|
|
<swipe-item v-for="(item, index) in regionsData" :key="index">
|
|
<swipe-item v-for="(item, index) in regionsData" :key="index">
|
|
|
- <div class="report-content has-report">
|
|
|
|
|
|
|
+ <div class="report-content has-report" :style="{ minHeight: `calc(100vh - ${tabBarHeight}px)` }">
|
|
|
<!-- <img src="@/assets/img/home/qrcode.png" alt="" class="code-icon" /> -->
|
|
<!-- <img src="@/assets/img/home/qrcode.png" alt="" class="code-icon" /> -->
|
|
|
<img class="header-img" src="@/assets/img/home/report.png" alt="" />
|
|
<img class="header-img" src="@/assets/img/home/report.png" alt="" />
|
|
|
<div class="report-header">
|
|
<div class="report-header">
|
|
|
<!-- <img class="header-book" src="@/assets/img/home/book.png" alt="" /> -->
|
|
<!-- <img class="header-book" src="@/assets/img/home/book.png" alt="" /> -->
|
|
|
- <div class="time-tag">{{ workItem?.reportDate }}</div>
|
|
|
|
|
- <div class="report-title">长势报告</div>
|
|
|
|
|
|
|
+ <div class="time-tag">{{ workItems?.[0]?.reportDate }}</div>
|
|
|
|
|
+ <div class="report-title">{{regionsData[currentIndex]?.regionName}}长势报告</div>
|
|
|
<div class="report-info">
|
|
<div class="report-info">
|
|
|
<div class="info-item">
|
|
<div class="info-item">
|
|
|
<img class="info-icon" src="@/assets/img/home/farm.png" alt="" />
|
|
<img class="info-icon" src="@/assets/img/home/farm.png" alt="" />
|
|
|
- <span class="info-text">{{ workItem?.orchardName }}</span>
|
|
|
|
|
|
|
+ <span class="info-text">{{ currentFarmName }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- 左滑查看更多 -->
|
|
<!-- 左滑查看更多 -->
|
|
|
- <div class="swipe-more-tag">
|
|
|
|
|
|
|
+ <div class="swipe-more-tag" v-show="currentIndex < regionsData.length - 1">
|
|
|
左滑查看更多分区
|
|
左滑查看更多分区
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -34,11 +34,11 @@
|
|
|
<div class="row">
|
|
<div class="row">
|
|
|
<div v-for="(card, cardI) in todayPatrolFocus" :key="cardI" class="status-card" :class="card.type"
|
|
<div v-for="(card, cardI) in todayPatrolFocus" :key="cardI" class="status-card" :class="card.type"
|
|
|
>
|
|
>
|
|
|
- <badge class="status-badge" dot
|
|
|
|
|
|
|
+ <!-- <badge class="status-badge" dot
|
|
|
:offset="[80, -10]">
|
|
:offset="[80, -10]">
|
|
|
- </badge>
|
|
|
|
|
|
|
+ </badge> -->
|
|
|
<div class="status-title">
|
|
<div class="status-title">
|
|
|
- {{ card.typeName }}
|
|
|
|
|
|
|
+ {{ card.title }}
|
|
|
</div>
|
|
</div>
|
|
|
<div class="status-sub" v-if="card.source === 'NEXT_PHENOLOGY'">
|
|
<div class="status-sub" v-if="card.source === 'NEXT_PHENOLOGY'">
|
|
|
预计{{card.daysUntilNext}}天后进入
|
|
预计{{card.daysUntilNext}}天后进入
|
|
@@ -57,9 +57,9 @@
|
|
|
<div class="row">
|
|
<div class="row">
|
|
|
<div v-for="(card, cardI) in pendingFarmWork" :key="cardI" class="status-card" :class="card.type"
|
|
<div v-for="(card, cardI) in pendingFarmWork" :key="cardI" class="status-card" :class="card.type"
|
|
|
>
|
|
>
|
|
|
- <badge class="status-badge" dot
|
|
|
|
|
|
|
+ <!-- <badge class="status-badge" dot
|
|
|
:offset="[80, -10]">
|
|
:offset="[80, -10]">
|
|
|
- </badge>
|
|
|
|
|
|
|
+ </badge> -->
|
|
|
<div class="status-title">
|
|
<div class="status-title">
|
|
|
{{ card.name }}
|
|
{{ card.name }}
|
|
|
</div>
|
|
</div>
|
|
@@ -71,67 +71,29 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <div class="report-box">
|
|
|
|
|
- <div class="box-title">物候与长势</div>
|
|
|
|
|
- <div class="box-text">
|
|
|
|
|
- <div class="box-bg">
|
|
|
|
|
- <span class="box-subtitle">背景描述:</span>
|
|
|
|
|
- <div v-html="workItem?.phenologyBackground"></div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="box-advice">
|
|
|
|
|
- <span class="box-subtitle">对策建议:</span>
|
|
|
|
|
- <div v-html="workItem?.phenologySuggestion"></div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="box-sum" v-html="workItem?.phenologySummary"></div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <div class="report-box">
|
|
|
|
|
- <div class="box-title">病虫害问题</div>
|
|
|
|
|
- <div class="box-text">
|
|
|
|
|
- <div class="box-bg">
|
|
|
|
|
- <span class="box-subtitle">背景描述:</span>
|
|
|
|
|
- <div v-html="workItem?.pestBackground"></div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="box-advice">
|
|
|
|
|
- <span class="box-subtitle">对策建议:</span>
|
|
|
|
|
- <div v-html="workItem?.pestSuggestion"></div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div class="box-sum">
|
|
|
|
|
- <div v-html="workItem?.pestSummary"></div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <div class="report-box">
|
|
|
|
|
- <div class="box-title">今日巡园重点</div>
|
|
|
|
|
- <div class="box-text">
|
|
|
|
|
- {{ workItem?.summaryAgricultural || "--" }}
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
-
|
|
|
|
|
- <div class="report-box">
|
|
|
|
|
- <div class="box-title">未来预测</div>
|
|
|
|
|
|
|
+ <div class="report-box" v-for="(work, workI) in workItems" :key="workI">
|
|
|
|
|
+ <div class="box-title">{{ work?.title }}</div>
|
|
|
<div class="box-text">
|
|
<div class="box-text">
|
|
|
- <div class="box-bg">
|
|
|
|
|
|
|
+ <div class="box-bg" v-show="work?.backgroundDesc">
|
|
|
<span class="box-subtitle">背景描述:</span>
|
|
<span class="box-subtitle">背景描述:</span>
|
|
|
- <div v-html="workItem?.forecastBackground"></div>
|
|
|
|
|
|
|
+ <div v-html="work?.backgroundDesc"></div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="box-advice">
|
|
|
|
|
|
|
+ <div class="box-advice" v-show="work?.suggestion">
|
|
|
<span class="box-subtitle">对策建议:</span>
|
|
<span class="box-subtitle">对策建议:</span>
|
|
|
- <div v-html="workItem?.forecastSuggestion"></div>
|
|
|
|
|
|
|
+ <div v-html="work?.suggestion"></div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ <div class="box-sum" v-show="work?.summary" v-html="work?.summary"></div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <div class="report-box">
|
|
|
|
|
|
|
+ <!-- <div class="report-box">
|
|
|
<div class="box-text next-info">
|
|
<div class="box-text next-info">
|
|
|
<div class="box-bg">
|
|
<div class="box-bg">
|
|
|
<span class="box-subtitle">下一次农情互动预告:</span>
|
|
<span class="box-subtitle">下一次农情互动预告:</span>
|
|
|
<div v-html="workItem?.nextInteractionPreview"></div>
|
|
<div v-html="workItem?.nextInteractionPreview"></div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- </div>
|
|
|
|
|
|
|
+ </div> -->
|
|
|
</div>
|
|
</div>
|
|
|
</swipe-item>
|
|
</swipe-item>
|
|
|
</swipe>
|
|
</swipe>
|
|
@@ -143,12 +105,12 @@
|
|
|
<img class="header-img" src="@/assets/img/home/report.png" alt="" />
|
|
<img class="header-img" src="@/assets/img/home/report.png" alt="" />
|
|
|
<div class="report-header">
|
|
<div class="report-header">
|
|
|
<!-- <img class="header-book" src="@/assets/img/home/book.png" alt="" /> -->
|
|
<!-- <img class="header-book" src="@/assets/img/home/book.png" alt="" /> -->
|
|
|
- <div class="time-tag">{{ workItem?.reportDate }}</div>
|
|
|
|
|
|
|
+ <div class="time-tag">{{ new Date().toISOString().split('T')[0] }}</div>
|
|
|
<div class="report-title">作物长势报告</div>
|
|
<div class="report-title">作物长势报告</div>
|
|
|
<div class="report-info pb-4">
|
|
<div class="report-info pb-4">
|
|
|
<div class="info-item">
|
|
<div class="info-item">
|
|
|
<img class="info-icon" src="@/assets/img/home/farm.png" alt="" />
|
|
<img class="info-icon" src="@/assets/img/home/farm.png" alt="" />
|
|
|
- <span class="info-text">{{ workItem?.orchardName }}</span>
|
|
|
|
|
|
|
+ <span class="info-text">示范农场</span>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -167,7 +129,7 @@
|
|
|
<div class="swipe-guide-mask" v-if="showSwipeGuide" @click="closeSwipeGuide">
|
|
<div class="swipe-guide-mask" v-if="showSwipeGuide" @click="closeSwipeGuide">
|
|
|
<div class="swipe-guide-content">
|
|
<div class="swipe-guide-content">
|
|
|
<img class="swipe-guide-icon" src="@/assets/img/home/point.png" alt="swipe" />
|
|
<img class="swipe-guide-icon" src="@/assets/img/home/point.png" alt="swipe" />
|
|
|
- <div class="swipe-guide-text">左滑查看其它品种报告</div>
|
|
|
|
|
|
|
+ <div class="swipe-guide-text">左滑查看其它分区报告</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
@@ -191,82 +153,7 @@ const route = useRoute();
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
const loading = ref(false);
|
|
const loading = ref(false);
|
|
|
const hasReport = ref(false);
|
|
const hasReport = ref(false);
|
|
|
-const workItem = ref({
|
|
|
|
|
- reportDate: new Date().toISOString().split('T')[0],
|
|
|
|
|
- executeDate: new Date().toISOString().split('T')[0],
|
|
|
|
|
- orchardName: '示范农场',
|
|
|
|
|
- farmName: '荔枝博览园',
|
|
|
|
|
- resultInfo: '近7天时间地点,当下农情指标(物候期指标等等),面临的风险和出现的问题。',
|
|
|
|
|
- growthInfo: {
|
|
|
|
|
- description: '当前处于蒂蛀虫高发期,请及时采集。处于蒂蛀虫高发期',
|
|
|
|
|
- advice: '根据问题写一下需要注意的事项有哪些;简单描述农事该怎么做(可以链接详细的操作贴);更加详细的意见,等待专家进一步确认。如果都没有问题,那么这个时期高发什么风险,需要密切关注。',
|
|
|
|
|
- },
|
|
|
|
|
- futureInfo: {
|
|
|
|
|
- description: '为什么这个气象风险很重要,对产量有什么影响;',
|
|
|
|
|
- advice: '如果需要做农事,就建议农事,如果暂时不需要做农事,就提醒密切关注长势动态。',
|
|
|
|
|
- },
|
|
|
|
|
- nextInfo: {
|
|
|
|
|
- advice: '时间和主题,主要是为了什么互动,说明其重要性。',
|
|
|
|
|
- },
|
|
|
|
|
-});
|
|
|
|
|
-function formatArea(val) {
|
|
|
|
|
- const num = typeof val === "number" ? val : parseFloat(val);
|
|
|
|
|
- if (Number.isNaN(num)) return val;
|
|
|
|
|
- return Number.isInteger(num) ? num : num.toFixed(2) + "亩";
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-const todayRows = ref([
|
|
|
|
|
- {
|
|
|
|
|
- label: "农情",
|
|
|
|
|
- cards: [
|
|
|
|
|
- {
|
|
|
|
|
- id: 1,
|
|
|
|
|
- title: "新梢萌动",
|
|
|
|
|
- sub: "预计3天后进入",
|
|
|
|
|
- type: "risk-strong",
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 2,
|
|
|
|
|
- title: "冲梢异常",
|
|
|
|
|
- sub: "占比3%",
|
|
|
|
|
- type: "normal",
|
|
|
|
|
- badge: true,
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 3,
|
|
|
|
|
- title: "病虫风险",
|
|
|
|
|
- sub: "一级风险",
|
|
|
|
|
- type: "danger",
|
|
|
|
|
- },
|
|
|
|
|
- ],
|
|
|
|
|
- },
|
|
|
|
|
-]);
|
|
|
|
|
-const todoRows = ref([
|
|
|
|
|
- {
|
|
|
|
|
- label: "农事",
|
|
|
|
|
- cards: [
|
|
|
|
|
- {
|
|
|
|
|
- id: 4,
|
|
|
|
|
- title: "第一段防治",
|
|
|
|
|
- sub: "待完成",
|
|
|
|
|
- type: "risk-strong",
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 5,
|
|
|
|
|
- title: "控梢",
|
|
|
|
|
- sub: "待触发",
|
|
|
|
|
- type: "normal",
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- id: 6,
|
|
|
|
|
- title: "无",
|
|
|
|
|
- sub: "",
|
|
|
|
|
- type: "disabled",
|
|
|
|
|
- },
|
|
|
|
|
- ],
|
|
|
|
|
- },
|
|
|
|
|
-]);
|
|
|
|
|
-
|
|
|
|
|
|
|
+const workItems = ref([]);
|
|
|
|
|
|
|
|
const paramsPage = ref({});
|
|
const paramsPage = ref({});
|
|
|
const showBindSuccess = ref(false);
|
|
const showBindSuccess = ref(false);
|
|
@@ -288,19 +175,16 @@ const handleMaskClick = () => {
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+const currentFarmName = ref('');
|
|
|
// 切换农场时,更新报告数据
|
|
// 切换农场时,更新报告数据
|
|
|
-const changeGarden = ({ id }) => {
|
|
|
|
|
|
|
+const changeGarden = ({ id, name }) => {
|
|
|
if (!id) return;
|
|
if (!id) return;
|
|
|
|
|
+ currentFarmName.value = name;
|
|
|
paramsPage.value = {
|
|
paramsPage.value = {
|
|
|
...(paramsPage.value || {}),
|
|
...(paramsPage.value || {}),
|
|
|
- farmId: id,
|
|
|
|
|
|
|
+ subjectId: id,
|
|
|
};
|
|
};
|
|
|
getRegions();
|
|
getRegions();
|
|
|
- const guideKey = "GROWTH_REPORT_SWIPE_GUIDE_SHOWN";
|
|
|
|
|
- if (!localStorage.getItem(guideKey)) {
|
|
|
|
|
- showSwipeGuide.value = true;
|
|
|
|
|
- localStorage.setItem(guideKey, "1");
|
|
|
|
|
- }
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
onActivated(() => {
|
|
onActivated(() => {
|
|
@@ -349,22 +233,25 @@ const setReadStatus = (id) => {
|
|
|
const todayPatrolFocus = ref([]);
|
|
const todayPatrolFocus = ref([]);
|
|
|
const pendingFarmWork = ref([]);
|
|
const pendingFarmWork = ref([]);
|
|
|
const getTodayPatrolFocus = () => {
|
|
const getTodayPatrolFocus = () => {
|
|
|
- VE_API.report.todayPatrolFocus({ farmId: paramsPage.value.regionId }).then(({ data }) => {
|
|
|
|
|
|
|
+ VE_API.report.todayPatrolFocus({ farmId: paramsPage.value.farmId, regionId:paramsPage.value.regionId }).then(({ data }) => {
|
|
|
todayPatrolFocus.value = data || [];
|
|
todayPatrolFocus.value = data || [];
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const getPendingFarmWork = () => {
|
|
const getPendingFarmWork = () => {
|
|
|
- VE_API.report.pendingFarmWork({ farmId: paramsPage.value.regionId }).then(({ data }) => {
|
|
|
|
|
|
|
+ VE_API.report.pendingFarmWork({ farmId: paramsPage.value.farmId, regionId: paramsPage.value.regionId }).then(({ data }) => {
|
|
|
pendingFarmWork.value = data || [];
|
|
pendingFarmWork.value = data || [];
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const currentIndex = ref(0);
|
|
|
const handleSwipeChange = (index) => {
|
|
const handleSwipeChange = (index) => {
|
|
|
- if (paramsPage.value.regionId !== regionsData.value[index].farmId) {
|
|
|
|
|
|
|
+ currentIndex.value = index;
|
|
|
|
|
+ if (paramsPage.value.regionId !== regionsData.value[index].regionId) {
|
|
|
paramsPage.value = {
|
|
paramsPage.value = {
|
|
|
...(paramsPage.value || {}),
|
|
...(paramsPage.value || {}),
|
|
|
- regionId: regionsData.value[index].farmId,
|
|
|
|
|
|
|
+ farmId: regionsData.value[index].farmId,
|
|
|
|
|
+ regionId: regionsData.value[index].regionId,
|
|
|
};
|
|
};
|
|
|
getTodayPatrolFocus();
|
|
getTodayPatrolFocus();
|
|
|
getPendingFarmWork();
|
|
getPendingFarmWork();
|
|
@@ -375,12 +262,12 @@ const handleSwipeChange = (index) => {
|
|
|
const getDetail = () => {
|
|
const getDetail = () => {
|
|
|
if (!paramsPage.value.farmId) return;
|
|
if (!paramsPage.value.farmId) return;
|
|
|
loading.value = true;
|
|
loading.value = true;
|
|
|
- VE_API.farm
|
|
|
|
|
- .growthReportBySubject({ subjectId: paramsPage.value.farmId, limit: 20 })
|
|
|
|
|
|
|
+ VE_API.report
|
|
|
|
|
+ .reproductiveReport({ farmId: paramsPage.value.farmId, regionId: paramsPage.value.regionId })
|
|
|
.then(({ data }) => {
|
|
.then(({ data }) => {
|
|
|
console.log('data', data);
|
|
console.log('data', data);
|
|
|
- workItem.value = data?.[0] || {};
|
|
|
|
|
- data?.[0]?.id && setReadStatus(data[0]?.id);
|
|
|
|
|
|
|
+ workItems.value = data || [];
|
|
|
|
|
+ // data?.[0]?.id && setReadStatus(data[0]?.id);
|
|
|
})
|
|
})
|
|
|
.finally(() => {
|
|
.finally(() => {
|
|
|
loading.value = false;
|
|
loading.value = false;
|
|
@@ -390,15 +277,20 @@ const getDetail = () => {
|
|
|
const regionsData = ref([]);
|
|
const regionsData = ref([]);
|
|
|
const getRegions = async () => {
|
|
const getRegions = async () => {
|
|
|
VE_API.monitor.listRegionsBySubjectId({
|
|
VE_API.monitor.listRegionsBySubjectId({
|
|
|
- subjectId: paramsPage.value.farmId,
|
|
|
|
|
|
|
+ subjectId: paramsPage.value.subjectId,
|
|
|
}).then(({ data }) => {
|
|
}).then(({ data }) => {
|
|
|
- console.log('getRegions', data);
|
|
|
|
|
regionsData.value = data || [];
|
|
regionsData.value = data || [];
|
|
|
if(regionsData.value.length > 0) {
|
|
if(regionsData.value.length > 0) {
|
|
|
|
|
+ const guideKey = "GROWTH_REPORT_SWIPE_GUIDE_SHOWN";
|
|
|
|
|
+ if (!localStorage.getItem(guideKey)) {
|
|
|
|
|
+ showSwipeGuide.value = true;
|
|
|
|
|
+ localStorage.setItem(guideKey, "1");
|
|
|
|
|
+ }
|
|
|
hasReport.value = true;
|
|
hasReport.value = true;
|
|
|
paramsPage.value = {
|
|
paramsPage.value = {
|
|
|
...(paramsPage.value || {}),
|
|
...(paramsPage.value || {}),
|
|
|
- regionId: regionsData.value[0].farmId,
|
|
|
|
|
|
|
+ farmId: regionsData.value[0].farmId,
|
|
|
|
|
+ regionId: regionsData.value[0].regionId,
|
|
|
};
|
|
};
|
|
|
getTodayPatrolFocus();
|
|
getTodayPatrolFocus();
|
|
|
getPendingFarmWork();
|
|
getPendingFarmWork();
|
|
@@ -411,7 +303,7 @@ const getRegions = async () => {
|
|
|
|
|
|
|
|
// 清理数据的函数
|
|
// 清理数据的函数
|
|
|
const clearData = () => {
|
|
const clearData = () => {
|
|
|
- workItem.value = {};
|
|
|
|
|
|
|
+ workItems.value = [];
|
|
|
paramsPage.value = {};
|
|
paramsPage.value = {};
|
|
|
loading.value = false;
|
|
loading.value = false;
|
|
|
};
|
|
};
|