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; | ... | ... |