Commit 7cdca435498ecf13358287e7e9538a7026a8e0dd
1 parent
bf9d205b
perf: data board component chart component update color not update immediate
Showing
2 changed files
with
44 additions
and
8 deletions
... | ... | @@ -79,15 +79,20 @@ |
79 | 79 | const getUpdateValueFn = (componentType: InstrumentComponentType) => { |
80 | 80 | if (componentType === 'instrument-component-1') return update_instrument_1_value; |
81 | 81 | if (componentType === 'instrument-component-2') return update_instrument_2_value; |
82 | - return (_radio: number) => {}; | |
82 | + return (_radio: DashBoardValue) => {}; | |
83 | 83 | }; |
84 | 84 | |
85 | - const updateChartValue = useThrottleFn((newValue) => { | |
85 | + const updateChartValue = useThrottleFn(() => { | |
86 | 86 | const updateFn = getUpdateValueFn(props.layout.componentType); |
87 | - unref(chartRef)?.setOption((updateFn(newValue || 0) as unknown as EChartsOption) || {}); | |
87 | + unref(chartRef)?.setOption((updateFn(props.value) as unknown as EChartsOption) || {}); | |
88 | 88 | }, 500); |
89 | 89 | |
90 | - watch(() => props.value.value, updateChartValue); | |
90 | + watch(() => props.value, updateChartValue); | |
91 | + | |
92 | + // watch( | |
93 | + // () => [props.value.gradientInfo, props.value.unit, props.value.valueColor, props.value.name], | |
94 | + // updateChartValue | |
95 | + // ); | |
91 | 96 | |
92 | 97 | const updateChartFont = useThrottleFn(() => { |
93 | 98 | const option = beforeUpdateFn(props.layout.componentType); |
... | ... | @@ -110,7 +115,9 @@ |
110 | 115 | function handleRandomValue() { |
111 | 116 | const newValue = Math.floor(Math.random() * 100); |
112 | 117 | const updateFn = getUpdateValueFn(props.layout.componentType); |
113 | - unref(chartRef)?.setOption((updateFn(newValue) as unknown as EChartsOption) || {}); | |
118 | + unref(chartRef)?.setOption( | |
119 | + (updateFn({ ...props.value, value: newValue }) as unknown as EChartsOption) || {} | |
120 | + ); | |
114 | 121 | } |
115 | 122 | |
116 | 123 | onMounted(() => { | ... | ... |
... | ... | @@ -32,7 +32,7 @@ export interface DashBoardValue { |
32 | 32 | name?: string; |
33 | 33 | updateTime?: string; |
34 | 34 | value?: number; |
35 | - valueColor?: string; | |
35 | + fontColor?: string; | |
36 | 36 | gradientInfo?: GradientInfoRecord[]; |
37 | 37 | } |
38 | 38 | |
... | ... | @@ -277,11 +277,16 @@ const handleValue = (value: any) => { |
277 | 277 | return Number(value).toFixed(2); |
278 | 278 | }; |
279 | 279 | |
280 | -export const update_instrument_1_value = (value: number) => { | |
280 | +export const update_instrument_1_value = (params: DashBoardValue) => { | |
281 | + const { value = 0, unit = '°C', fontColor } = params; | |
281 | 282 | return { |
282 | 283 | series: [ |
283 | 284 | { |
284 | 285 | data: [{ value: handleValue(value) }], |
286 | + detail: { | |
287 | + formatter: `{value} ${unit ?? ''}`, | |
288 | + color: fontColor || 'inherit', | |
289 | + }, | |
285 | 290 | }, |
286 | 291 | { |
287 | 292 | data: [{ value: handleValue(value) }], |
... | ... | @@ -290,11 +295,35 @@ export const update_instrument_1_value = (value: number) => { |
290 | 295 | } as EChartsOption; |
291 | 296 | }; |
292 | 297 | |
293 | -export const update_instrument_2_value = (value: number) => { | |
298 | +export const update_instrument_2_value = (params: DashBoardValue) => { | |
299 | + const { value = 0, unit = 'km/h', fontColor, gradientInfo } = params; | |
300 | + const firstRecord = getGradient(Gradient.FIRST, gradientInfo); | |
301 | + const secondRecord = getGradient(Gradient.SECOND, gradientInfo); | |
302 | + const thirdRecord = getGradient(Gradient.THIRD, gradientInfo); | |
303 | + | |
304 | + let max = thirdRecord?.value || secondRecord?.value || firstRecord?.value || 70; | |
305 | + max = Number(1 + Array(String(max).length).fill(0).join('')); | |
306 | + | |
307 | + const firstGradient = firstRecord?.value ? firstRecord.value / max : 0.3; | |
308 | + const secondGradient = secondRecord?.value ? secondRecord.value / max : 0.7; | |
294 | 309 | return { |
295 | 310 | series: [ |
296 | 311 | { |
297 | 312 | data: [{ value: handleValue(value) }], |
313 | + detail: { | |
314 | + formatter: `{value} ${unit ?? ''}`, | |
315 | + color: fontColor || 'inherit', | |
316 | + }, | |
317 | + axisLine: { | |
318 | + lineStyle: { | |
319 | + width: 20, | |
320 | + color: [ | |
321 | + [firstGradient, firstRecord?.color || GradientColor.FIRST], | |
322 | + [secondGradient, secondRecord?.color || GradientColor.SECOND], | |
323 | + [1, thirdRecord?.color || GradientColor.THIRD], | |
324 | + ], | |
325 | + }, | |
326 | + }, | |
298 | 327 | }, |
299 | 328 | ], |
300 | 329 | } as EChartsOption; | ... | ... |