|
@@ -27,8 +27,8 @@
|
|
|
aIdx === r.farmWorkArrangeList.length - 1 &&
|
|
aIdx === r.farmWorkArrangeList.length - 1 &&
|
|
|
rIdx !== r.farmWorkArrangeList.length - 1,
|
|
rIdx !== r.farmWorkArrangeList.length - 1,
|
|
|
},
|
|
},
|
|
|
- // 右侧农事卡片跟随物候期颜色:未来节气对应的农事卡片置灰
|
|
|
|
|
- { 'future-card': !shouldShowBlue(p) },
|
|
|
|
|
|
|
+ // 按单张农事展示日期置灰:晚于今天为 future-card;无日期时回退物候期规则
|
|
|
|
|
+ { 'future-card': shouldGrayFarmWorkCard(fw, p) },
|
|
|
]" @click="handleRowClick(fw)">
|
|
]" @click="handleRowClick(fw)">
|
|
|
<div class="card-content">
|
|
<div class="card-content">
|
|
|
<div class="card-left"
|
|
<div class="card-left"
|
|
@@ -47,7 +47,7 @@
|
|
|
</div> -->
|
|
</div> -->
|
|
|
</div>
|
|
</div>
|
|
|
<div class="title-text van-ellipsis"
|
|
<div class="title-text van-ellipsis"
|
|
|
- v-if="shouldShowBlue(p) && fw.sourceType != 4">{{ fw.content }}</div>
|
|
|
|
|
|
|
+ v-if="!shouldGrayFarmWorkCard(fw, p) && fw.sourceType != 4">{{ fw.content }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="card-left agri-record-card" v-else>
|
|
<div class="card-left agri-record-card" v-else>
|
|
|
<div class="left-info">
|
|
<div class="left-info">
|
|
@@ -81,7 +81,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
<template v-if="r.name === p.phenologyName">
|
|
<template v-if="r.name === p.phenologyName">
|
|
|
<div class="phenology-name text-blue"
|
|
<div class="phenology-name text-blue"
|
|
|
- :class="{ 'phenology-red': !shouldShowBlue(p), 'phenology-blue': shouldShowBlue(p) }"
|
|
|
|
|
|
|
+ :class="{ 'phenology-red': !shouldShowBlueLeft(p, r), 'phenology-blue': shouldShowBlueLeft(p, r) }"
|
|
|
:style="r.phenologyName === getNextPhenologyName(idx, rIdx) ? 'padding: 6px 0;' : ''">
|
|
:style="r.phenologyName === getNextPhenologyName(idx, rIdx) ? 'padding: 6px 0;' : ''">
|
|
|
{{ r.name }}
|
|
{{ r.name }}
|
|
|
</div>
|
|
</div>
|
|
@@ -89,18 +89,18 @@
|
|
|
<template v-else>
|
|
<template v-else>
|
|
|
<template v-if="p.phenologyName === getNextPhenologyName(idx, rIdx)">
|
|
<template v-if="p.phenologyName === getNextPhenologyName(idx, rIdx)">
|
|
|
<div class="phenology-name"
|
|
<div class="phenology-name"
|
|
|
- :class="{ 'text-red': !shouldShowBlue(p), 'text-blue': shouldShowBlue(p) }">
|
|
|
|
|
|
|
+ :class="{ 'text-red': !shouldShowBlueLeft(p, r), 'text-blue': shouldShowBlueLeft(p, r) }">
|
|
|
{{ r.name }}
|
|
{{ r.name }}
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
<template v-else>
|
|
<template v-else>
|
|
|
<div class="phenology-name"
|
|
<div class="phenology-name"
|
|
|
- :class="{ 'text-red': !shouldShowBlue(p), 'text-blue': shouldShowBlue(p) }">
|
|
|
|
|
|
|
+ :class="{ 'text-red': !shouldShowBlueLeft(p, r), 'text-blue': shouldShowBlueLeft(p, r) }">
|
|
|
{{ r.name }}
|
|
{{ r.name }}
|
|
|
</div>
|
|
</div>
|
|
|
<div class="phenology-name mr" :class="{
|
|
<div class="phenology-name mr" :class="{
|
|
|
- 'phenology-red': !shouldShowBlue(p),
|
|
|
|
|
- 'phenology-blue': shouldShowBlue(p),
|
|
|
|
|
|
|
+ 'phenology-red': !shouldShowBlueLeft(p, r),
|
|
|
|
|
+ 'phenology-blue': shouldShowBlueLeft(p, r),
|
|
|
}">
|
|
}">
|
|
|
{{ p.phenologyName }}
|
|
{{ p.phenologyName }}
|
|
|
</div>
|
|
</div>
|
|
@@ -938,18 +938,76 @@ const flowStatusStr = {
|
|
|
'5': '已认证',
|
|
'5': '已认证',
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 判断物候期是否应该显示蓝色(已过或当前节气的物候期)
|
|
|
|
|
-const shouldShowBlue = (phenology) => {
|
|
|
|
|
- // 农事记录页兼容:只要该物候期下存在待认证农事,左侧生育期/物候期均高亮为蓝色
|
|
|
|
|
- if (props.pageType === "agri_record") {
|
|
|
|
|
- const hasPendingAuth = (Array.isArray(phenology?.reproductiveList) ? phenology.reproductiveList : []).some((reproductive) =>
|
|
|
|
|
- (Array.isArray(reproductive?.farmWorkArrangeList) ? reproductive.farmWorkArrangeList : []).some((fw) => Number(fw?.flowStatus) === 3)
|
|
|
|
|
- );
|
|
|
|
|
- if (hasPendingAuth) {
|
|
|
|
|
|
|
+// 右侧农事卡片展示用日期(与模板 left-date 一致:规划 createTime、记录 recommendDate)
|
|
|
|
|
+const getFarmWorkTimelineDateMs = (fw) => {
|
|
|
|
|
+ const primary = props.pageType === "agri_plan" ? fw?.createTime : fw?.recommendDate ?? fw?.createTime;
|
|
|
|
|
+ let ms = safeParseDate(primary);
|
|
|
|
|
+ if (Number.isNaN(ms) || ms <= 0) {
|
|
|
|
|
+ ms = safeParseDate(props.pageType === "agri_plan" ? fw?.recommendDate : fw?.createTime);
|
|
|
|
|
+ }
|
|
|
|
|
+ return ms;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const isFarmWorkDateOnOrBeforeToday = (ms) => {
|
|
|
|
|
+ if (Number.isNaN(ms) || ms <= 0) return false;
|
|
|
|
|
+ const today = new Date();
|
|
|
|
|
+ today.setHours(0, 0, 0, 0);
|
|
|
|
|
+ const d = new Date(ms);
|
|
|
|
|
+ d.setHours(0, 0, 0, 0);
|
|
|
|
|
+ return d.getTime() <= today.getTime();
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 单张卡片:有有效展示日期且晚于今天 → 未来农事,右侧应置灰(与 left-date 同一套字段)
|
|
|
|
|
+const isFarmWorkTimelineStrictlyFuture = (fw) => {
|
|
|
|
|
+ const ms = getFarmWorkTimelineDateMs(fw);
|
|
|
|
|
+ if (Number.isNaN(ms) || ms <= 0) return false;
|
|
|
|
|
+ return !isFarmWorkDateOnOrBeforeToday(ms);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 右侧 arrange-card:未来日期置灰;解析不到日期时回退物候期节气/待认证规则(与旧版整段逻辑一致)
|
|
|
|
|
+// 无农事展示日期时的置灰回退:仅用节气/物候期 + 待认证(不含「任一行农事≤今天」),避免右侧卡片被外层标题连带误判
|
|
|
|
|
+const isPhenologyActiveWithoutFarmWorkDates = (phenology) =>
|
|
|
|
|
+ agriRecordHasPendingAuthInPhenology(phenology) || shouldShowBlueBase(phenology);
|
|
|
|
|
+
|
|
|
|
|
+const shouldGrayFarmWorkCard = (fw, phenology) => {
|
|
|
|
|
+ if (isFarmWorkTimelineStrictlyFuture(fw)) return true;
|
|
|
|
|
+ const ms = getFarmWorkTimelineDateMs(fw);
|
|
|
|
|
+ if (!Number.isNaN(ms) && ms > 0) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ return !isPhenologyActiveWithoutFarmWorkDates(phenology);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 某一生育期行下是否存在「农事时间 ≤ 今天」的卡片(与右侧 left-date 字段一致)
|
|
|
|
|
+const reproductiveHasFarmWorkOnOrBeforeToday = (reproductive) => {
|
|
|
|
|
+ const fws = Array.isArray(reproductive?.farmWorkArrangeList) ? reproductive.farmWorkArrangeList : [];
|
|
|
|
|
+ for (const fw of fws) {
|
|
|
|
|
+ if (isFarmWorkDateOnOrBeforeToday(getFarmWorkTimelineDateMs(fw))) {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ return false;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 物候期内是否至少有一行生育期因「农事≤今天」而高亮(用于最外层物候期标题与内层对齐)
|
|
|
|
|
+const phenologyHasFarmWorkOnOrBeforeToday = (phenology) => {
|
|
|
|
|
+ const reproductives = Array.isArray(phenology?.reproductiveList) ? phenology.reproductiveList : [];
|
|
|
|
|
+ return reproductives.some((r) => reproductiveHasFarmWorkOnOrBeforeToday(r));
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
|
|
+// 仅农事记录页(agri_record):该物候期内存在待认证农事时,左侧最外层物候期与各生育期/物候期文案均高亮为蓝;农事规划(agri_plan)不生效
|
|
|
|
|
+const agriRecordHasPendingAuthInPhenology = (phenology) => {
|
|
|
|
|
+ if (props.pageType !== "agri_record") return false;
|
|
|
|
|
+ return (Array.isArray(phenology?.reproductiveList) ? phenology.reproductiveList : []).some((reproductive) =>
|
|
|
|
|
+ (Array.isArray(reproductive?.farmWorkArrangeList) ? reproductive.farmWorkArrangeList : []).some((fw) => {
|
|
|
|
|
+ const s = fw?.flowStatus;
|
|
|
|
|
+ return s === 3 || s === "3";
|
|
|
|
|
+ })
|
|
|
|
|
+ );
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 物候期底色/节气规则(不含「农事卡片日期」「待认证」扩展)
|
|
|
|
|
+const shouldShowBlueBase = (phenology) => {
|
|
|
// 优先使用物候期真实日期判断:未来日期不应显示蓝色
|
|
// 优先使用物候期真实日期判断:未来日期不应显示蓝色
|
|
|
const phenologyTimeMs =
|
|
const phenologyTimeMs =
|
|
|
Number(phenology?.startTimeMs) ||
|
|
Number(phenology?.startTimeMs) ||
|
|
@@ -999,6 +1057,20 @@ const shouldShowBlue = (phenology) => {
|
|
|
return phenologyTermProgress < nextTermProgress;
|
|
return phenologyTermProgress < nextTermProgress;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+// 最外层物候期标题:与内层生育期对齐——任一生育行因农事≤今天变蓝;农事记录下有待认证则整段标题也蓝;否则按节气规则(右侧卡片仍按单卡日期置灰)
|
|
|
|
|
+const shouldShowBlue = (phenology) => {
|
|
|
|
|
+ if (phenologyHasFarmWorkOnOrBeforeToday(phenology)) return true;
|
|
|
|
|
+ if (agriRecordHasPendingAuthInPhenology(phenology)) return true;
|
|
|
|
|
+ return shouldShowBlueBase(phenology);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 左侧生育期/物候期文案:农事记录下物候期内有待认证则该段内所有生育期/物候期名称均蓝;否则本行农事≤今天或节气规则
|
|
|
|
|
+const shouldShowBlueLeft = (phenology, reproductive) => {
|
|
|
|
|
+ if (agriRecordHasPendingAuthInPhenology(phenology)) return true;
|
|
|
|
|
+ if (reproductiveHasFarmWorkOnOrBeforeToday(reproductive)) return true;
|
|
|
|
|
+ return shouldShowBlueBase(phenology);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
defineExpose({
|
|
defineExpose({
|
|
|
updateFarmWorkPlan,
|
|
updateFarmWorkPlan,
|
|
|
});
|
|
});
|