|
@@ -1,25 +1,25 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="record-wrap">
|
|
<div class="record-wrap">
|
|
|
- <custom-header name="农事名称"></custom-header>
|
|
|
|
|
|
|
+ <custom-header :name="t('recordDetails.workName')"></custom-header>
|
|
|
<div class="record-content">
|
|
<div class="record-content">
|
|
|
- <div class="record-header" v-if="route.query.type == '长势异常态势跟踪'">
|
|
|
|
|
- <span>长势异常态势跟踪</span>
|
|
|
|
|
- <div class="question">果径是否显著小于正常果,且果皮失去光泽、呈现暗哑状态?</div>
|
|
|
|
|
|
|
+ <div class="record-header" v-if="recordType === 'growth'">
|
|
|
|
|
+ <span>{{ t('agriRecord.growthWorkName') }}</span>
|
|
|
|
|
+ <div class="question">{{ t('recordDetails.growthQuestion') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="record-header" v-else-if="route.query.type == '病虫害态势监控'">
|
|
|
|
|
- <span>病虫害态势监控</span>
|
|
|
|
|
- <div class="question">蒂蛀虫、荔枝蝽蟓、炭疽病、霜疫霉病</div>
|
|
|
|
|
|
|
+ <div class="record-header" v-else-if="recordType === 'pest'">
|
|
|
|
|
+ <span>{{ t('agriRecord.pestWorkName') }}</span>
|
|
|
|
|
+ <div class="question">{{ t('recordDetails.pestQuestion') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="record-header" v-else>
|
|
<div class="record-header" v-else>
|
|
|
- <span>{{ workDetail.interaction_type }}</span>
|
|
|
|
|
- <div class="question">果实是否开始由扁圆变圆、横径明显增大?</div>
|
|
|
|
|
|
|
+ <span>{{ t('agriRecord.phenologyWorkName') }}</span>
|
|
|
|
|
+ <div class="question">{{ t('recordDetails.phenologyQuestion') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="record-body">
|
|
<div class="record-body">
|
|
|
- <div class="card-wrap" v-if="route.query.type == '长势异常态势跟踪'">
|
|
|
|
|
|
|
+ <div class="card-wrap" v-if="recordType === 'growth'">
|
|
|
<div class="card-item">
|
|
<div class="card-item">
|
|
|
- <span class="item-label">科普知识:</span>
|
|
|
|
|
- <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
|
|
|
|
|
- content="当前荔枝处于果实膨大期,近期存在强降水和强对流天气频发的情况,且当前识别到阴雨气象风险较高3级,累计阴雨天数达12天、日均湿度约91%。连续阴雨导致光照不足,月累计日照时数较常年偏少17%,叶片光合效率下降,碳水化合物合成减少" />
|
|
|
|
|
|
|
+ <span class="item-label">{{ t('recordDetails.scienceLabel') }}</span>
|
|
|
|
|
+ <text-ellipsis class="item-value" :expand-text="expandCollapse.expand" :collapse-text="expandCollapse.collapse" rows="3"
|
|
|
|
|
+ :content="t('recordDetails.growthScience')" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="tabs-list" v-if="!showMap">
|
|
<div class="tabs-list" v-if="!showMap">
|
|
|
<div class="item-tab" :class="{ 'item-tab--active': activeTab1 === index }"
|
|
<div class="item-tab" :class="{ 'item-tab--active': activeTab1 === index }"
|
|
@@ -27,21 +27,21 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="card-item">
|
|
<div class="card-item">
|
|
|
- <span class="item-label">表型特征:</span>
|
|
|
|
|
- <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
|
|
|
|
|
- content="果实膨大速度慢,果皮颜色黄绿、光泽度差,严重时果面出现细微水裂纹;萎蔫时叶片下垂卷曲;缺氮时老叶均匀黄化;缺钾时老叶叶缘焦枯;缺镁时老叶叶肉黄化、叶脉仍绿;缺钙时果实易裂果;缺硼时果实发育不良、果皮木栓化;缺锌时果实大小不均;缺铁时新叶黄白失绿" />
|
|
|
|
|
|
|
+ <span class="item-label">{{ t('recordDetails.phenotypeLabel') }}</span>
|
|
|
|
|
+ <text-ellipsis class="item-value" :expand-text="expandCollapse.expand" :collapse-text="expandCollapse.collapse" rows="3"
|
|
|
|
|
+ :content="t('recordDetails.growthPhenotype')" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="card-item">
|
|
<div class="card-item">
|
|
|
- <span class="item-label">高发区域:</span>
|
|
|
|
|
- <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
|
|
|
|
|
- content="重点巡视低洼地、排水不畅的粘重土壤果园,以及树冠中下部及内膛果实。观察果实膨大进度,对比不同方位果穗大小差异;观察叶片萎蔫程度和黄化部位。拔根检查根系状态——砂土看根系是否偏白不烂,黏土看是否发软发臭,酸性土看根尖是否膨大变黑,盐碱土看是否被泥浆包裹,重金属土看是否发黑有异味,荔枝土看根尖是否变黑腐臭。根系受损时先排水松土养根,暂不施根肥,叶面维持,等新根萌发后再施根肥。发现异常症状后请拍照上传,及时存档。" />
|
|
|
|
|
|
|
+ <span class="item-label">{{ t('recordDetails.highRiskLabel') }}</span>
|
|
|
|
|
+ <text-ellipsis class="item-value" :expand-text="expandCollapse.expand" :collapse-text="expandCollapse.collapse" rows="3"
|
|
|
|
|
+ :content="t('recordDetails.growthHighRisk')" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="card-wrap" v-else-if="route.query.type == '病虫害态势监控'">
|
|
|
|
|
|
|
+ <div class="card-wrap" v-else-if="recordType === 'pest'">
|
|
|
<div class="card-item">
|
|
<div class="card-item">
|
|
|
- <span class="item-label">科普知识:</span>
|
|
|
|
|
- <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
|
|
|
|
|
- content="当前荔枝处于果期,预测田间病虫害气象风险2级,近期湿度达88%、日均气温达30℃,该环境条件十分有利于害虫活动和病原菌侵染。果期是荔枝产量形成的关键阶段,幼果皮层薄嫩、抗逆性弱,一旦遭受蒂蛀虫、荔枝蝽象、霜疫霉病、炭疽病等主要病虫为害,将直接导致落果、烂果,严重影响产量和品质。需抓紧巡园,同步做好虫情、病情的动态监测,防范风险升级。" />
|
|
|
|
|
|
|
+ <span class="item-label">{{ t('recordDetails.scienceLabel') }}</span>
|
|
|
|
|
+ <text-ellipsis class="item-value" :expand-text="expandCollapse.expand" :collapse-text="expandCollapse.collapse" rows="3"
|
|
|
|
|
+ :content="t('recordDetails.pestScience')" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="pest-classify-picker">
|
|
<div class="pest-classify-picker">
|
|
|
<div class="pest-classify-picker__row pest-classify-picker__row--top">
|
|
<div class="pest-classify-picker__row pest-classify-picker__row--top">
|
|
@@ -64,32 +64,31 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="card-item">
|
|
<div class="card-item">
|
|
|
- <span class="item-label">表型特征:</span>
|
|
|
|
|
- <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
|
|
|
|
|
- :content="text1" />
|
|
|
|
|
|
|
+ <span class="item-label">{{ t('recordDetails.phenotypeLabel') }}</span>
|
|
|
|
|
+ <text-ellipsis class="item-value" :expand-text="expandCollapse.expand" :collapse-text="expandCollapse.collapse" rows="3"
|
|
|
|
|
+ :content="pestText1Content" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="card-item">
|
|
<div class="card-item">
|
|
|
- <span class="item-label">高发区域:</span>
|
|
|
|
|
- <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
|
|
|
|
|
- :content="text2" />
|
|
|
|
|
|
|
+ <span class="item-label">{{ t('recordDetails.highRiskLabel') }}</span>
|
|
|
|
|
+ <text-ellipsis class="item-value" :expand-text="expandCollapse.expand" :collapse-text="expandCollapse.collapse" rows="3"
|
|
|
|
|
+ :content="pestText2Content" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="card-wrap" v-else>
|
|
<div class="card-wrap" v-else>
|
|
|
<div class="card-item">
|
|
<div class="card-item">
|
|
|
- <span class="item-label">农情研判:</span>
|
|
|
|
|
- <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
|
|
|
|
|
- content="膨果期果实开始横向生长,由扁圆形逐渐转为圆球形,是果肉细胞快速分裂膨大和干物质积累的关键阶段,氮和钾需求双高。氮促进果肉细胞分裂膨大,钾促进光合产物转运和糖分积累。此时养分供应不足会导致果实膨大受阻、单果重偏低,需及时根部追肥保障果实发育。" />
|
|
|
|
|
|
|
+ <span class="item-label">{{ t('recordDetails.farmAnalysisLabel') }}</span>
|
|
|
|
|
+ <text-ellipsis class="item-value" :expand-text="expandCollapse.expand" :collapse-text="expandCollapse.collapse" rows="3"
|
|
|
|
|
+ :content="t('recordDetails.phenologyAnalysis')" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="card-item">
|
|
<div class="card-item">
|
|
|
- <span class="item-label">巡园要点:</span>
|
|
|
|
|
- <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
|
|
|
|
|
|
|
+ <span class="item-label">{{ t('recordDetails.patrolLabel') }}</span>
|
|
|
|
|
+ <text-ellipsis class="item-value" :expand-text="expandCollapse.expand" :collapse-text="expandCollapse.collapse" rows="3"
|
|
|
:content="workDetail.inspection_keypoints" />
|
|
:content="workDetail.inspection_keypoints" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="card-item">
|
|
<div class="card-item">
|
|
|
- <span class="item-label">表型特征:</span>
|
|
|
|
|
- <text-ellipsis class="item-value" expand-text="展开" collapse-text="收起" rows="3"
|
|
|
|
|
- content="果实由扁圆形开始横向增宽,果皮青绿色有光泽,果实横径明显增大,果肩逐渐饱满。
|
|
|
|
|
-巡园要点:重点观察树冠外围中上部结果枝,检查果实形状变化和横径大小,统计进入快速膨大的果实比例。拍照记录果实膨大状态,上传存档。" />
|
|
|
|
|
|
|
+ <span class="item-label">{{ t('recordDetails.phenotypeLabel') }}</span>
|
|
|
|
|
+ <text-ellipsis class="item-value" :expand-text="expandCollapse.expand" :collapse-text="expandCollapse.collapse" rows="3"
|
|
|
|
|
+ :content="t('recordDetails.phenologyPhenotype')" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<!-- <div class="tabs-list" v-if="!showMap">
|
|
<!-- <div class="tabs-list" v-if="!showMap">
|
|
@@ -109,23 +108,24 @@
|
|
|
</div>
|
|
</div>
|
|
|
<div class="my-map">
|
|
<div class="my-map">
|
|
|
<div class="map-container" ref="mapContainer">
|
|
<div class="map-container" ref="mapContainer">
|
|
|
- <div class="tip">点击勾画新发生区域</div>
|
|
|
|
|
|
|
+ <div class="tip">{{ t('recordDetails.drawTip') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="confirm-btn-wrap">
|
|
<div class="confirm-btn-wrap">
|
|
|
- <div class="cancel-btn">暂未到达进程</div>
|
|
|
|
|
- <div class="confirm-btn">确认上传</div>
|
|
|
|
|
|
|
+ <div class="cancel-btn">{{ t('recordDetails.notReached') }}</div>
|
|
|
|
|
+ <div class="confirm-btn">{{ t('recordDetails.confirmUpload') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div v-if="!showMap && route.query.type == '物候跟踪记录'" class="border-wrap no-map-wrap">
|
|
|
|
|
|
|
+ <div v-if="!showMap && recordType === 'phenology'" class="border-wrap no-map-wrap">
|
|
|
<div class="question-info">
|
|
<div class="question-info">
|
|
|
- <span class="title">关键防治需肥期评估:</span>
|
|
|
|
|
- <span class="content">是否有60%的荔枝进入膨果期? </span>
|
|
|
|
|
- <div class="current-status">当前现状:当前{{ curStage.label }}进入到{{ curStage.periodTitle }}</div>
|
|
|
|
|
|
|
+ <span class="title">{{ t('recordDetails.keyAssessment') }}</span>
|
|
|
|
|
+ <span class="content">{{ t('recordDetails.phenologyIssue') }}</span>
|
|
|
|
|
+ <div class="current-status">{{ currentStatusText }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="time-line">
|
|
<div class="time-line">
|
|
|
<GrowthStageTimeline v-model="growthStageIndex" :stages="growthStages"
|
|
<GrowthStageTimeline v-model="growthStageIndex" :stages="growthStages"
|
|
|
- @scroll-settled="onStageScrollSettled" />
|
|
|
|
|
|
|
+ @scroll-settled="onStageScrollSettled"
|
|
|
|
|
+ @locale-change="getFindPhenologyInfo" />
|
|
|
<!-- <GrowthStageTimeline v-model="growthStageIndex" :stages="growthStages" /> -->
|
|
<!-- <GrowthStageTimeline v-model="growthStageIndex" :stages="growthStages" /> -->
|
|
|
</div>
|
|
</div>
|
|
|
<div class="confirm-btn-wrap">
|
|
<div class="confirm-btn-wrap">
|
|
@@ -135,26 +135,26 @@
|
|
|
<el-icon>
|
|
<el-icon>
|
|
|
<Plus />
|
|
<Plus />
|
|
|
</el-icon>
|
|
</el-icon>
|
|
|
- <span>点击上传照片</span>
|
|
|
|
|
|
|
+ <span>{{ t('recordDetails.uploadPhoto') }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
</uploader>
|
|
</uploader>
|
|
|
- <div class="confirm-btn" @click="hanldeSubmit">确认信息</div>
|
|
|
|
|
|
|
+ <div class="confirm-btn" @click="hanldeSubmit">{{ t('recordDetails.confirmInfo') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="phenology-track-section">
|
|
<div class="phenology-track-section">
|
|
|
- <PhenologyTrackTimelineItem v-for="(row, idx) in phenologyTrackList" :key="idx" :date="row.date"
|
|
|
|
|
|
|
+ <PhenologyTrackTimelineItem v-for="(row, idx) in displayPhenologyTrackList" :key="idx" :date="row.date"
|
|
|
:content="row.content" :images="row.images" />
|
|
:content="row.content" :images="row.images" />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<!-- <div class="custom-bottom-fixed-btns">
|
|
<!-- <div class="custom-bottom-fixed-btns">
|
|
|
- <div class="bottom-btn secondary-btn">转发记录</div>
|
|
|
|
|
|
|
+ <div class="bottom-btn secondary-btn">{{ $t('转发记录') }}</div>
|
|
|
</div> -->
|
|
</div> -->
|
|
|
|
|
|
|
|
<!-- <div class="phenology-tip-banner">
|
|
<!-- <div class="phenology-tip-banner">
|
|
|
<div class="banner__left">
|
|
<div class="banner__left">
|
|
|
- <div class="banner__title">物候不整齐?</div>
|
|
|
|
|
|
|
+ <div class="banner__title">{{ $t('物候不整齐?') }}</div>
|
|
|
<span class="banner__desc">
|
|
<span class="banner__desc">
|
|
|
如果区域长势不同,会降低病虫害防治功效,
|
|
如果区域长势不同,会降低病虫害防治功效,
|
|
|
建议根据长势拆分区域,进行分区精细管理,
|
|
建议根据长势拆分区域,进行分区精细管理,
|
|
@@ -166,23 +166,23 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div> -->
|
|
</div> -->
|
|
|
|
|
|
|
|
- <div class="phenology-tip-banner" v-if="route.query.type != '物候跟踪记录'">
|
|
|
|
|
|
|
+ <div class="phenology-tip-banner" v-if="recordType !== 'phenology'">
|
|
|
<div class="banner__left">
|
|
<div class="banner__left">
|
|
|
<div class="banner__title">
|
|
<div class="banner__title">
|
|
|
<el-icon size="17">
|
|
<el-icon size="17">
|
|
|
<WarningFilled />
|
|
<WarningFilled />
|
|
|
</el-icon>
|
|
</el-icon>
|
|
|
- <span>发现异常,拍照记录</span>
|
|
|
|
|
|
|
+ <span>{{ t('recordDetails.abnormalBanner') }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<span class="banner__desc">
|
|
<span class="banner__desc">
|
|
|
- 系统为您智能匹配农事方案
|
|
|
|
|
|
|
+ {{ t('recordDetails.abnormalBannerDesc') }}
|
|
|
</span>
|
|
</span>
|
|
|
</div>
|
|
</div>
|
|
|
<!-- <div class="banner__btn" @click="goPartitionManage">
|
|
<!-- <div class="banner__btn" @click="goPartitionManage">
|
|
|
分区管理
|
|
分区管理
|
|
|
</div> -->
|
|
</div> -->
|
|
|
<div class="banner__btn" @click="handleAbnormalRecord">
|
|
<div class="banner__btn" @click="handleAbnormalRecord">
|
|
|
- 异常记录
|
|
|
|
|
|
|
+ {{ t('recordDetails.abnormalRecord') }}
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
@@ -191,8 +191,8 @@
|
|
|
@cancel="handleCancelUploadPopup" @confirm="handleConfirmUpload" @handleUpload="handleUploadSuccess">
|
|
@cancel="handleCancelUploadPopup" @confirm="handleConfirmUpload" @handleUpload="handleUploadSuccess">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="upload-progress-title">
|
|
<div class="upload-progress-title">
|
|
|
- <span class="label">当前现状:</span>
|
|
|
|
|
- <span class="value">60% 进入红黄叶进程</span>
|
|
|
|
|
|
|
+ <span class="label">{{ $t('当前现状:') }}</span>
|
|
|
|
|
+ <span class="value">{{ $t('60% 进入红黄叶进程') }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</UploadProgressPopup> -->
|
|
</UploadProgressPopup> -->
|
|
@@ -203,8 +203,8 @@
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="upload-form">
|
|
<div class="upload-form">
|
|
|
<div class="form-item aaa">
|
|
<div class="form-item aaa">
|
|
|
- <div class="item-label" style="font-size: 14px;color: #5A5A5A;">有多少植株出现了异常?</div>
|
|
|
|
|
- <el-input v-model="formData.regionName" size="large" placeholder="请输入">
|
|
|
|
|
|
|
+ <div class="item-label" style="font-size: 14px;color: #5A5A5A;">{{ t('recordDetails.abnormalCount') }}</div>
|
|
|
|
|
+ <el-input v-model="formData.regionName" size="large" :placeholder="t('recordDetails.inputPlaceholder')">
|
|
|
<template #suffix>
|
|
<template #suffix>
|
|
|
%
|
|
%
|
|
|
</template>
|
|
</template>
|
|
@@ -215,11 +215,11 @@
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
<div class="upload-form">
|
|
<div class="upload-form">
|
|
|
<div class="form-item">
|
|
<div class="form-item">
|
|
|
- <div class="item-label">巡园描述</div>
|
|
|
|
|
- <el-input v-model="formData.regionName" size="large" placeholder="请输入描述" />
|
|
|
|
|
|
|
+ <div class="item-label">{{ t('recordDetails.patrolDesc') }}</div>
|
|
|
|
|
+ <el-input v-model="formData.regionName" size="large" :placeholder="t('recordDetails.inputDescPlaceholder')" />
|
|
|
</div>
|
|
</div>
|
|
|
<div class="map-container" ref="mapContainer">
|
|
<div class="map-container" ref="mapContainer">
|
|
|
- <div class="tip">点击勾画新发生区域</div>
|
|
|
|
|
|
|
+ <div class="tip">{{ t('recordDetails.drawTip') }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
@@ -232,8 +232,10 @@ import customHeader from "@/components/customHeader.vue";
|
|
|
import PhenologyTrackTimelineItem from "@/components/pageComponents/PhenologyTrackTimelineItem.vue";
|
|
import PhenologyTrackTimelineItem from "@/components/pageComponents/PhenologyTrackTimelineItem.vue";
|
|
|
import GrowthStageTimeline from "@/components/pageComponents/GrowthStageTimeline.vue";
|
|
import GrowthStageTimeline from "@/components/pageComponents/GrowthStageTimeline.vue";
|
|
|
import UploadProgressPopup from "@/components/popup/UploadProgressPopup.vue";
|
|
import UploadProgressPopup from "@/components/popup/UploadProgressPopup.vue";
|
|
|
-import { ref, onMounted, watch, nextTick } from 'vue';
|
|
|
|
|
|
|
+import { ref, onMounted, watch, nextTick, computed } from 'vue';
|
|
|
import { useRouter, useRoute } from 'vue-router';
|
|
import { useRouter, useRoute } from 'vue-router';
|
|
|
|
|
+import { useI18n } from '@/i18n';
|
|
|
|
|
+import { RECORD_KEY_MAP } from '@/i18n/recordTextMap';
|
|
|
import { Uploader, TextEllipsis } from "vant";
|
|
import { Uploader, TextEllipsis } from "vant";
|
|
|
import { ElMessage } from "element-plus";
|
|
import { ElMessage } from "element-plus";
|
|
|
import UploadFile from "@/utils/upliadFile";
|
|
import UploadFile from "@/utils/upliadFile";
|
|
@@ -243,6 +245,24 @@ import { Plus } from "@element-plus/icons-vue";
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
|
|
|
+const { t } = useI18n();
|
|
|
|
|
+
|
|
|
|
|
+const TYPE_LEGACY_MAP = {
|
|
|
|
|
+ 长势异常态势跟踪: 'growth',
|
|
|
|
|
+ 病虫害态势监控: 'pest',
|
|
|
|
|
+ 物候跟踪记录: 'phenology',
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const recordType = computed(() => {
|
|
|
|
|
+ const type = route.query.type;
|
|
|
|
|
+ return TYPE_LEGACY_MAP[type] || type || 'phenology';
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+const expandCollapse = computed(() => ({
|
|
|
|
|
+ expand: t('recordDetails.expand'),
|
|
|
|
|
+ collapse: t('recordDetails.collapse'),
|
|
|
|
|
+}));
|
|
|
|
|
+
|
|
|
function goPartitionManage() {
|
|
function goPartitionManage() {
|
|
|
router.push({ name: 'MapManage' });
|
|
router.push({ name: 'MapManage' });
|
|
|
}
|
|
}
|
|
@@ -251,65 +271,72 @@ const showMap = ref(false);
|
|
|
|
|
|
|
|
/** 病虫害态势监控:分类选择(接入接口后可绑定 workDetail) */
|
|
/** 病虫害态势监控:分类选择(接入接口后可绑定 workDetail) */
|
|
|
const pestTopIndex = ref(0);
|
|
const pestTopIndex = ref(0);
|
|
|
-const pestTopLabels = ['病害', '虫害'];
|
|
|
|
|
const pestCategoryIndex = ref(0);
|
|
const pestCategoryIndex = ref(0);
|
|
|
const pestDetailIndex = ref(0);
|
|
const pestDetailIndex = ref(0);
|
|
|
-const pestCategoryLabels = ref(['真菌类', '钻蛀类', '病毒类', '其它']);
|
|
|
|
|
-const pestDetailLabels = ref(['霜疫霉病', '炭疽病', '叶瘟', '纹枯病']);
|
|
|
|
|
|
|
+const pestDetailKeys = ref(['detDownyMildew', 'detAnthracnose', 'detBlast', 'detSheathBlight']);
|
|
|
|
|
+
|
|
|
|
|
+const pestTopLabels = computed(() => [t('recordDetails.pestDisease'), t('recordDetails.pestInsect')]);
|
|
|
|
|
+
|
|
|
|
|
+const pestCategoryLabels = computed(() => {
|
|
|
|
|
+ if (pestTopIndex.value === 0) {
|
|
|
|
|
+ return ['catFungal', 'catBorer', 'catVirus', 'catOther'].map((k) => t(`recordDetails.${k}`));
|
|
|
|
|
+ }
|
|
|
|
|
+ return ['catChewing', 'catMasticate', 'catBorer', 'catOther'].map((k) => t(`recordDetails.${k}`));
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+const pestDetailLabels = computed(() =>
|
|
|
|
|
+ pestDetailKeys.value.map((k) => t(`recordDetails.${k}`))
|
|
|
|
|
+);
|
|
|
|
|
+
|
|
|
|
|
+const pestText1Content = computed(() => {
|
|
|
|
|
+ const top = pestTopIndex.value;
|
|
|
|
|
+ const cat = pestCategoryIndex.value;
|
|
|
|
|
+ const det = pestDetailIndex.value;
|
|
|
|
|
+ if (top === 0) {
|
|
|
|
|
+ return det === 0 ? t('recordDetails.pestT1_downy') : t('recordDetails.pestT1_anthracnose');
|
|
|
|
|
+ }
|
|
|
|
|
+ if (cat === 0) return t('recordDetails.pestT1_stinkbug');
|
|
|
|
|
+ if (cat !== 0 && det !== 0) return t('recordDetails.pestT1_stemborer');
|
|
|
|
|
+ return t('recordDetails.pestT1_riceborer');
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+const pestText2Content = computed(() => {
|
|
|
|
|
+ const top = pestTopIndex.value;
|
|
|
|
|
+ const cat = pestCategoryIndex.value;
|
|
|
|
|
+ const det = pestDetailIndex.value;
|
|
|
|
|
+ if (top === 0) {
|
|
|
|
|
+ return det === 0 ? t('recordDetails.pestT2_downy') : t('recordDetails.pestT2_anthracnose');
|
|
|
|
|
+ }
|
|
|
|
|
+ if (cat === 0) return t('recordDetails.pestT2_stinkbug');
|
|
|
|
|
+ if (cat !== 0 && det !== 0) return t('recordDetails.pestT2_stemborer');
|
|
|
|
|
+ return t('recordDetails.pestT2_riceborer');
|
|
|
|
|
+});
|
|
|
|
|
|
|
|
-const text1 = ref('果实感病后出现水渍状褪绿斑块,湿度大时表面产生白色霜状霉层,后病部变褐软腐,果实腐烂脱落。膨大期至转色期果实感病后病斑扩展迅速,果肉褐变腐烂,有酸臭味,病果易脱落。')
|
|
|
|
|
-const text2 = ref('重点巡查果园低洼积水处、密蔽通风不良处的果穗,观察果实表面有无水渍状褪绿斑块,清晨或雨后湿度大时查看病斑表面有无白色霜状霉层,用手轻捏感病果实检查是否软腐,闻有无酸臭味。发现病斑后请拍照上传,及时存档,便于记录发生程度与防控节点。')
|
|
|
|
|
const handlePestTopClick = (index) => {
|
|
const handlePestTopClick = (index) => {
|
|
|
pestTopIndex.value = index;
|
|
pestTopIndex.value = index;
|
|
|
- handlePestCategoryClick(0)
|
|
|
|
|
|
|
+ pestCategoryIndex.value = 0;
|
|
|
|
|
+ pestDetailIndex.value = 0;
|
|
|
if (index === 0) {
|
|
if (index === 0) {
|
|
|
- pestCategoryLabels.value = ['真菌类', '钻蛀类', '病毒类', '其它'];
|
|
|
|
|
- pestDetailLabels.value = ['霜疫霉病', '炭疽病', '叶瘟', '纹枯病'];
|
|
|
|
|
|
|
+ pestDetailKeys.value = ['detDownyMildew', 'detAnthracnose', 'detBlast', 'detSheathBlight'];
|
|
|
} else {
|
|
} else {
|
|
|
- pestCategoryLabels.value = ['啃食类', '咀嚼式', '钻蛀类', '其它'];
|
|
|
|
|
- pestDetailLabels.value = ['荔枝蝽象'];
|
|
|
|
|
|
|
+ pestDetailKeys.value = ['detStinkBug'];
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const handlePestCategoryClick = (index) => {
|
|
const handlePestCategoryClick = (index) => {
|
|
|
pestCategoryIndex.value = index;
|
|
pestCategoryIndex.value = index;
|
|
|
- handlePestDetailClick(0)
|
|
|
|
|
- if (index === 0) {
|
|
|
|
|
- if (pestTopIndex.value == 1) {
|
|
|
|
|
- pestDetailLabels.value = ['荔枝蝽象'];
|
|
|
|
|
- } else {
|
|
|
|
|
- pestDetailLabels.value = ['霜疫霉病', '炭疽病', '叶瘟', '纹枯病'];
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ pestDetailIndex.value = 0;
|
|
|
|
|
+ if (pestTopIndex.value === 1) {
|
|
|
|
|
+ pestDetailKeys.value = index === 0 ? ['detStinkBug'] : ['detRiceBorer'];
|
|
|
|
|
+ } else if (index !== 0) {
|
|
|
|
|
+ pestDetailKeys.value = ['detStemBorer'];
|
|
|
} else {
|
|
} else {
|
|
|
- if (pestTopIndex.value == 1) {
|
|
|
|
|
- pestDetailLabels.value = ['二化螟'];
|
|
|
|
|
- } else {
|
|
|
|
|
- text1.value = '成虫为小型蛾类,幼虫钻蛀果实,从果蒂附近蛀入果心,蛀食果核和果肉,造成果实内部充满虫粪。受害果实外表初期无明显异常,后期果蒂周围变黑、果实提前着色变红脱落("红果"现象),落果剖开可见幼虫及虫粪。'
|
|
|
|
|
- text2.value = '重点巡查树冠内膛和下垂枝的果穗,注意捡拾地面落果,剖开检查果核周围有无幼虫和虫粪。观察树上果实有无果蒂变黑、提前转红的异常果。成虫调查时,在晨昏成虫活动期用手掌用力拍打树冠内膛的枝干,观察是否有小蛾受惊飞出,以此判断成虫发生密度。关键防治节点需通过收集落果观察蛹的羽化进度来确定打药时机。发现为害状及活虫后请拍照上传,及时存档,便于记录发生程度与防控节点。'
|
|
|
|
|
- pestDetailLabels.value = ['蒂蛀虫'];
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ pestDetailKeys.value = ['detDownyMildew', 'detAnthracnose', 'detBlast', 'detSheathBlight'];
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const handlePestDetailClick = (index) => {
|
|
const handlePestDetailClick = (index) => {
|
|
|
pestDetailIndex.value = index;
|
|
pestDetailIndex.value = index;
|
|
|
- if (pestTopIndex.value === 0) {
|
|
|
|
|
- if (index === 0) {
|
|
|
|
|
- text1.value = '果实感病后出现水渍状褪绿斑块,湿度大时表面产生白色霜状霉层,后病部变褐软腐,果实腐烂脱落。膨大期至转色期果实感病后病斑扩展迅速,果肉褐变腐烂,有酸臭味,病果易脱落。';
|
|
|
|
|
- text2.value = '重点巡查果园低洼积水处、密蔽通风不良处的果穗,观察果实表面有无水渍状褪绿斑块,清晨或雨后湿度大时查看病斑表面有无白色霜状霉层,用手轻捏感病果实检查是否软腐,闻有无酸臭味。发现病斑后请拍照上传,及时存档,便于记录发生程度与防控节点。';
|
|
|
|
|
- } else {
|
|
|
|
|
- text1.value = '果实感病后出现暗褐色水渍状斑点,后扩展为圆形或不规则形黑褐色凹陷病斑,边缘明显,湿度大时病斑表面出现粉红色黏稠孢子堆。病斑深入果肉导致腐烂,病果干缩后挂在枝头不脱落形成僵果。';
|
|
|
|
|
- text2.value = '重点巡查树冠内膛及下部枝条的果穗,观察果实表面有无暗褐色至黑褐色凹陷病斑,病斑边缘是否清晰,在湿度大的清晨查看病斑表面有无粉红色黏稠物。注意与霜疫霉病区分:炭疽病病斑凹陷干缩,霜疫霉病病部湿软腐烂。发现病斑后请拍照上传,及时存档,便于记录发生程度与防控节点。';
|
|
|
|
|
- }
|
|
|
|
|
- }else {
|
|
|
|
|
- if (pestCategoryIndex.value === 0) {
|
|
|
|
|
- text1.value = '成虫和若虫刺吸幼果和嫩梢汁液,受害果实出现褐色坏死斑点,果实发育受阻、果形不正,严重时幼果大量脱落。成虫体长约25mm、黄褐色盾形,受惊时释放臭液;若虫体色鲜红至橙红,群集为害。'
|
|
|
|
|
- text2.value = '重点巡查树冠中上部外围果穗集中处,观察果实和果梗上是否有黄褐色盾形成虫或红色群集若虫。轻摇枝条看是否有成虫受惊飞逃,同时闻是否有刺激性臭味。发现为害状及活虫后请拍照上传,及时存档,便于记录发生程度与防控节点。'
|
|
|
|
|
- } else {
|
|
|
|
|
- text1.value = '幼虫钻蛀稻茎基部,造成枯心苗,受害株心叶变黄枯死,茎秆基部有圆形蛀孔及虫粪排出,轻拔枯心苗易折断,断口可见幼虫或虫道'
|
|
|
|
|
- text2.value = '重点巡查田间分散出现的枯心团或枯心带,沿行间逐株检查心叶是否变黄萎蔫。拔取枯心株,用刀片或指甲剥开茎秆基部,检查内部有无淡褐色或灰白色幼虫、虫粪及蛀道。发现为害状及活虫后请拍照上传,及时存档,便于记录发生程度与防控节点'
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const indexMap = new IndexMap();
|
|
const indexMap = new IndexMap();
|
|
@@ -324,14 +351,21 @@ const tabsList = ref([
|
|
|
{ label: '分区四', value: 3 },
|
|
{ label: '分区四', value: 3 },
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
-const activeTab1 = ref(0)
|
|
|
|
|
-const tabsList1 = ref([
|
|
|
|
|
- { label: '膨果受阻', value: 0 },
|
|
|
|
|
- { label: '长势缓慢', value: 1 },
|
|
|
|
|
- { label: '植株旺长', value: 2 },
|
|
|
|
|
- { label: '叶片萎蔫', value: 3 },
|
|
|
|
|
|
|
+const activeTab1 = ref(0);
|
|
|
|
|
+const tabsList1 = computed(() => [
|
|
|
|
|
+ { label: t('recordDetails.tabFruitBlocked'), value: 0 },
|
|
|
|
|
+ { label: t('recordDetails.tabSlowGrowth'), value: 1 },
|
|
|
|
|
+ { label: t('recordDetails.tabVigorous'), value: 2 },
|
|
|
|
|
+ { label: t('recordDetails.tabWilting'), value: 3 },
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
|
|
+const currentStatusText = computed(() =>
|
|
|
|
|
+ t('recordDetails.currentStatus', {
|
|
|
|
|
+ label: curStage.value?.label || '',
|
|
|
|
|
+ period: curStage.value?.periodTitle || '',
|
|
|
|
|
+ })
|
|
|
|
|
+);
|
|
|
|
|
+
|
|
|
const formData = ref({
|
|
const formData = ref({
|
|
|
regionName: '',
|
|
regionName: '',
|
|
|
});
|
|
});
|
|
@@ -385,7 +419,7 @@ const hanldeSubmit = () => {
|
|
|
}
|
|
}
|
|
|
VE_API.monitor.farmPhenologyAdjust(params).then(res => {
|
|
VE_API.monitor.farmPhenologyAdjust(params).then(res => {
|
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
|
- ElMessage.success('确认成功')
|
|
|
|
|
|
|
+ ElMessage.success(t('recordDetails.confirmSuccess'))
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
@@ -430,7 +464,7 @@ const handleCancelUploadPopup = () => {
|
|
|
|
|
|
|
|
const handleConfirmUpload = () => {
|
|
const handleConfirmUpload = () => {
|
|
|
if (!uploadData.value || uploadData.value.length === 0) {
|
|
if (!uploadData.value || uploadData.value.length === 0) {
|
|
|
- ElMessage.warning("请先上传照片");
|
|
|
|
|
|
|
+ ElMessage.warning(t('recordDetails.uploadPhotoFirst'));
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
showUploadProgressPopup.value = false;
|
|
showUploadProgressPopup.value = false;
|
|
@@ -438,8 +472,22 @@ const handleConfirmUpload = () => {
|
|
|
|
|
|
|
|
const handleUploadClick = () => { };
|
|
const handleUploadClick = () => { };
|
|
|
|
|
|
|
|
-/** 物候跟踪时间轴示例数据,接入接口后可替换 */
|
|
|
|
|
-const phenologyTrackList = ref([]);
|
|
|
|
|
|
|
+/** 物候跟踪时间轴原始数据,接入接口后可替换 */
|
|
|
|
|
+const phenologyTrackRawList = ref([]);
|
|
|
|
|
+
|
|
|
|
|
+const formatTrackItemContent = (item) => {
|
|
|
|
|
+ const recordText = t(RECORD_KEY_MAP[item.record] || item.record);
|
|
|
|
|
+ const ratio = String(item.ratio ?? "").trim();
|
|
|
|
|
+ return ratio ? `${recordText}${ratio}%` : recordText;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const displayPhenologyTrackList = computed(() =>
|
|
|
|
|
+ phenologyTrackRawList.value.map((item) => ({
|
|
|
|
|
+ date: item.time,
|
|
|
|
|
+ content: formatTrackItemContent(item),
|
|
|
|
|
+ images: item.images || [],
|
|
|
|
|
+ }))
|
|
|
|
|
+);
|
|
|
// const phenologyTrackList = ref([
|
|
// const phenologyTrackList = ref([
|
|
|
// { date: '04/18', content: '有 60%已经来花了', images: [] },
|
|
// { date: '04/18', content: '有 60%已经来花了', images: [] },
|
|
|
// {
|
|
// {
|
|
@@ -592,24 +640,9 @@ const getFarmRecord = async () => {
|
|
|
]
|
|
]
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if (res.code === 200 && res.data?.abnormal.length) {
|
|
|
|
|
- if(route.query.type == '物候跟踪记录'){
|
|
|
|
|
- phenologyTrackList.value = res.data.phenology.map(item => {
|
|
|
|
|
- return {
|
|
|
|
|
- date: item.time,
|
|
|
|
|
- content: item.record + item.ratio + '%',
|
|
|
|
|
- images: []
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }else{
|
|
|
|
|
- phenologyTrackList.value = res.data.abnormal.map(item => {
|
|
|
|
|
- return {
|
|
|
|
|
- date: item.time,
|
|
|
|
|
- content: item.record + item.ratio + '%',
|
|
|
|
|
- images: []
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (res.code === 200 && res.data?.abnormal?.length) {
|
|
|
|
|
+ phenologyTrackRawList.value =
|
|
|
|
|
+ recordType.value === "phenology" ? res.data.phenology || [] : res.data.abnormal || [];
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|