|
@@ -31,6 +31,7 @@ const props = withDefaults(
|
|
|
perSeriesLegend?: boolean
|
|
perSeriesLegend?: boolean
|
|
|
gridHeight?: number
|
|
gridHeight?: number
|
|
|
gridDivider?: boolean
|
|
gridDivider?: boolean
|
|
|
|
|
+ freezeY?: boolean
|
|
|
}>(),
|
|
}>(),
|
|
|
{
|
|
{
|
|
|
height: 180,
|
|
height: 180,
|
|
@@ -45,6 +46,7 @@ const props = withDefaults(
|
|
|
insideZoom: false,
|
|
insideZoom: false,
|
|
|
perSeriesLegend: false,
|
|
perSeriesLegend: false,
|
|
|
gridDivider: false,
|
|
gridDivider: false,
|
|
|
|
|
+ freezeY: false,
|
|
|
},
|
|
},
|
|
|
)
|
|
)
|
|
|
|
|
|
|
@@ -175,13 +177,15 @@ function buildOption(): Record<string, unknown> {
|
|
|
splitLine: { show: false },
|
|
splitLine: { show: false },
|
|
|
axisPointer: { label: { show: false } },
|
|
axisPointer: { label: { show: false } },
|
|
|
})
|
|
})
|
|
|
|
|
+ const yMin = s.yMin ?? props.yMin
|
|
|
|
|
+ const yMax = s.yMax ?? props.yMax
|
|
|
yAxis.push({
|
|
yAxis.push({
|
|
|
type: 'value',
|
|
type: 'value',
|
|
|
gridIndex: i,
|
|
gridIndex: i,
|
|
|
show: props.showYAxis,
|
|
show: props.showYAxis,
|
|
|
scale: true,
|
|
scale: true,
|
|
|
- min: s.yMin ?? props.yMin,
|
|
|
|
|
- max: s.yMax ?? props.yMax,
|
|
|
|
|
|
|
+ ...(yMin != null ? { min: yMin } : {}),
|
|
|
|
|
+ ...(yMax != null ? { max: yMax } : {}),
|
|
|
splitNumber: 4,
|
|
splitNumber: 4,
|
|
|
axisLine: { show: false },
|
|
axisLine: { show: false },
|
|
|
axisTick: { show: false },
|
|
axisTick: { show: false },
|
|
@@ -305,9 +309,37 @@ function buildOption(): Record<string, unknown> {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/** dataZoom 时锁定 y 轴:取 echarts 首次自适应出的量程并写回为固定值(下次数据刷新会重算)。 */
|
|
|
|
|
+function freezeYAxis(): void {
|
|
|
|
|
+ if (!chart) return
|
|
|
|
|
+ const model = (chart as unknown as { getModel?: () => unknown }).getModel?.() as
|
|
|
|
|
+ | { getComponent?: (type: string, index: number) => unknown }
|
|
|
|
|
+ | undefined
|
|
|
|
|
+ if (!model?.getComponent) return
|
|
|
|
|
+ const patch = props.series.map((s, i) => {
|
|
|
|
|
+ if (s.yMin != null || s.yMax != null) return {}
|
|
|
|
|
+ try {
|
|
|
|
|
+ const axis = model.getComponent?.('yAxis', i) as
|
|
|
|
|
+ | { axis?: { scale?: { getExtent?: () => [number, number] } } }
|
|
|
|
|
+ | undefined
|
|
|
|
|
+ const extent = axis?.axis?.scale?.getExtent?.()
|
|
|
|
|
+ if (!extent || extent.length < 2) return {}
|
|
|
|
|
+ const [min, max] = extent
|
|
|
|
|
+ if (!Number.isFinite(min) || !Number.isFinite(max) || min === max) return {}
|
|
|
|
|
+ return { min, max }
|
|
|
|
|
+ } catch {
|
|
|
|
|
+ return {}
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ if (patch.some((item) => Object.keys(item).length)) {
|
|
|
|
|
+ chart.setOption({ yAxis: patch } as unknown as echarts.EChartsOption)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
function render(): void {
|
|
function render(): void {
|
|
|
if (!chart) return
|
|
if (!chart) return
|
|
|
chart.setOption(buildOption() as unknown as echarts.EChartsOption, { notMerge: true })
|
|
chart.setOption(buildOption() as unknown as echarts.EChartsOption, { notMerge: true })
|
|
|
|
|
+ if (props.freezeY) freezeYAxis()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|