|
|
|
|
@ -32,6 +32,21 @@ function useEcharts(chartRef: Ref<EchartsUIType>) {
|
|
|
|
|
const { height, width } = useWindowSize();
|
|
|
|
|
const resizeHandler: () => void = useDebounceFn(resize, 200);
|
|
|
|
|
|
|
|
|
|
const getChartEl = (): HTMLElement | null => {
|
|
|
|
|
const refValue = chartRef?.value as unknown;
|
|
|
|
|
if (!refValue) return null;
|
|
|
|
|
if (refValue instanceof HTMLElement) {
|
|
|
|
|
return refValue;
|
|
|
|
|
}
|
|
|
|
|
const maybeComponent = refValue as { $el?: HTMLElement };
|
|
|
|
|
return maybeComponent.$el ?? null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const isElHidden = (el: HTMLElement | null): boolean => {
|
|
|
|
|
if (!el) return true;
|
|
|
|
|
return el.offsetHeight === 0 || el.offsetWidth === 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const getOptions = computed((): EChartsOption => {
|
|
|
|
|
if (!isDark.value) {
|
|
|
|
|
return {};
|
|
|
|
|
@ -54,7 +69,7 @@ function useEcharts(chartRef: Ref<EchartsUIType>) {
|
|
|
|
|
|
|
|
|
|
const renderEcharts = (
|
|
|
|
|
options: EChartsOption,
|
|
|
|
|
clear = true,
|
|
|
|
|
clear = true
|
|
|
|
|
): Promise<Nullable<echarts.ECharts>> => {
|
|
|
|
|
cacheOptions = options;
|
|
|
|
|
const currentOptions = {
|
|
|
|
|
@ -69,6 +84,13 @@ function useEcharts(chartRef: Ref<EchartsUIType>) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
nextTick(() => {
|
|
|
|
|
const el = getChartEl();
|
|
|
|
|
if (isElHidden(el)) {
|
|
|
|
|
useTimeoutFn(async () => {
|
|
|
|
|
resolve(await renderEcharts(currentOptions));
|
|
|
|
|
}, 30);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
useTimeoutFn(() => {
|
|
|
|
|
if (!chartInstance) {
|
|
|
|
|
const instance = initCharts();
|
|
|
|
|
@ -83,6 +105,10 @@ function useEcharts(chartRef: Ref<EchartsUIType>) {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function resize() {
|
|
|
|
|
const el = getChartEl();
|
|
|
|
|
if (isElHidden(el)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
chartInstance?.resize({
|
|
|
|
|
animation: {
|
|
|
|
|
duration: 300,
|
|
|
|
|
|