2 Commits 61cb8c136c ... e5905da1ee

Author SHA1 Message Date
  jiuling e5905da1ee Merge branch 'master' of http://121.4.16.100:3001/gebadi/jiayouhouyuan 15 hours ago
  jiuling 0197e22445 图标样式修改 15 hours ago
1 changed files with 56 additions and 26 deletions
  1. 56 26
      pages/trace/detail.vue

+ 56 - 26
pages/trace/detail.vue

@@ -411,22 +411,7 @@
 								<path class="chartPathP" :d="chartPaths.p" stroke="url(#gradP)" />
 								<path class="chartPathK" :d="chartPaths.k" stroke="url(#gradK)" />
 
-								<!-- 数据点 -->
-								<circle v-for="(pt, idx) in chartPoints.n" :key="`n-${idx}`"
-									class="chartDotN"
-									cx="0" cy="0" r="3"
-									:transform="`translate(${pt.x}, ${pt.y})`"
-								/>
-								<circle v-for="(pt, idx) in chartPoints.p" :key="`p-${idx}`"
-									class="chartDotP"
-									cx="0" cy="0" r="3"
-									:transform="`translate(${pt.x}, ${pt.y})`"
-								/>
-								<circle v-for="(pt, idx) in chartPoints.k" :key="`k-${idx}`"
-									class="chartDotK"
-									cx="0" cy="0" r="3"
-									:transform="`translate(${pt.x}, ${pt.y})`"
-								/>
+<!-- 数据点已取消显示 -->
 							</svg>
 						</view>
 
@@ -1178,7 +1163,7 @@ const loadDeviceList = (currentFieldId) => {
 						// #ifdef H5
 						// H5 环境:分别保存 wss_flv 和 hls
 						const rawWsFlv = res.data.data.wss_flv
-						const rawHls = res.data.data.hls
+						const rawHls = res.data.data.https_hls
 
 						// 非 iOS H5:走 wss_flv + Jessibuca,保留 URL 替换逻辑
 						if (!isH5IOS.value && rawWsFlv) {
@@ -1258,8 +1243,8 @@ const loadData = async (batchId) => {
     }
 	loadDeviceList(res.data.data.fieldId) // 根据地块ID查询设备信息
 	
-	const beginCollectTime = formatDateTime(traceInfo.value.startPlantingTime);
-	const endCollectTime = formatDateTime(traceInfo.value.packageDate);
+	const beginCollectTime = formatDateTime(traceInfo.value.startPlantingTime);// 开始使用播种时间作为起始时间
+	const endCollectTime = formatDateTime(traceInfo.value.produceDate); // 结尾使用成熟采收时间
 	const paramsMap = {
 		beginCollectTime:beginCollectTime,
 		endCollectTime:endCollectTime,
@@ -2264,6 +2249,11 @@ const chartData = computed(() => {
 	const valuesN = chart.values.n || []
 	const valuesP = chart.values.p || []
 	const valuesK = chart.values.k || []
+	const labels = chart.labels || []
+
+	// 使用 labels 长度作为基准(X轴标签数量)
+	// 如果 labels 为空,使用 values 长度
+	const baseLength = labels.length > 0 ? labels.length : valuesN.length
 
 	// 收集所有有效数值,计算全局范围
 	const allValues = [...valuesN, ...valuesP, ...valuesK]
@@ -2308,15 +2298,49 @@ const chartData = computed(() => {
 		})
 	}
 
-	// 计算点坐标(带平滑
+	// 计算点坐标(基于 baseLength,即 labels 长度
 	const calcPoints = (data) => {
 		if (!data.length) return []
-		const smoothed = smoothValues(data.filter(v => typeof v === 'number' && !Number.isNaN(v)))
-		return smoothed.map((val, idx, arr) => ({
-			x: calcX(idx, arr.length),
-			y: calcY(val),
-			value: val
-		}))
+		const dataLen = data.length
+
+		// 如果数据长度等于 baseLength,直接使用原始数据
+		if (dataLen === baseLength) {
+			return data.map((val, idx) => ({
+				x: calcX(idx, baseLength),
+				y: calcY(val),
+				value: val
+			}))
+		}
+
+		// 数据长度与 baseLength 不同时,进行线性插值
+		const points = []
+		for (let idx = 0; idx < baseLength; idx++) {
+			// 将当前索引映射到数据数组中的位置
+			const ratio = idx / (baseLength - 1) // 0 到 1 的比例
+			const dataPos = ratio * (dataLen - 1)
+
+			const lowerIdx = Math.floor(dataPos)
+			const upperIdx = Math.ceil(dataPos)
+
+			let val
+			if (lowerIdx === upperIdx) {
+				// 正好落在某个数据点上
+				val = data[lowerIdx]
+			} else {
+				// 在两个数据点之间,进行线性插值
+				const t = dataPos - lowerIdx
+				const lowerVal = data[lowerIdx]
+				const upperVal = data[upperIdx]
+				val = lowerVal + t * (upperVal - lowerVal)
+			}
+
+			points.push({
+				x: calcX(idx, baseLength),
+				y: calcY(val),
+				value: val
+			})
+		}
+		return points
 	}
 
 	// 生成平滑曲线路径(使用优化的张力系数)
@@ -3402,16 +3426,22 @@ function previewDoc(kind, index) {
 /* 数据点样式(小而柔和) */
 .chartDotN {
 	fill: rgba(47, 125, 85, 0.85);
+	transition: opacity 0.2s ease;
 }
 
 .chartDotP {
 	fill: rgba(180, 140, 70, 0.85);
+	transition: opacity 0.2s ease;
 }
 
 .chartDotK {
 	fill: rgba(84, 130, 110, 0.85);
+	transition: opacity 0.2s ease;
 }
 
+/* 选中指示线样式 */
+/* 已移除 - 不再需要 */
+
 .chartLabels {
 	position: absolute;
 	bottom: 0;