Skip to content

Commit

Permalink
fix(charts): fix echarts does not display after refresh #140
Browse files Browse the repository at this point in the history
  • Loading branch information
anncwb committed Dec 22, 2020
1 parent f69aaea commit 5cbfb2a
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 35 deletions.
10 changes: 6 additions & 4 deletions src/components/Container/index.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { withInstall } from '../util';

import CollapseContainer from './src/collapse/CollapseContainer.vue';
import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
export const ScrollContainer = createAsyncComponent(() => import('./src/ScrollContainer.vue'));
export const CollapseContainer = createAsyncComponent(
() => import('./src/collapse/CollapseContainer.vue')
);

// export const CollapseContainer = createAsyncComponent(
// () => import('./src/collapse/CollapseContainer.vue')
// );
export const LazyContainer = createAsyncComponent(() => import('./src/LazyContainer.vue'));

withInstall(ScrollContainer, CollapseContainer, LazyContainer);

export { CollapseContainer };
export * from './src/types';
36 changes: 16 additions & 20 deletions src/hooks/web/useApexCharts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,14 @@ import { unref, Ref, nextTick } from 'vue';

import ApexCharts from 'apexcharts';

interface CallBackFn {
(instance: Nullable<ApexCharts>): void;
}

export function useApexCharts(elRef: Ref<HTMLDivElement>) {
let chartInstance: Nullable<ApexCharts> = null;

function setOptions(options: any, callback) {
function setOptions(options: any, callback?: CallBackFn) {
nextTick(() => {
useTimeoutFn(() => {
const el = unref(elRef);
Expand All @@ -16,37 +20,29 @@ export function useApexCharts(elRef: Ref<HTMLDivElement>) {
chartInstance = new ApexCharts(el, options);

chartInstance && chartInstance.render();

// setOptions增加callback方法,返回chartInstance,以便于对图表进行再操作,例如调用updateOptions方法更新图表
callback && callback(chartInstance);

}, 30);
});
}

// 新增调用ApexCharts的updateOptions方法更新图表
function updateOptions(
chartInstance: Nullable<ApexCharts>,
options,
redraw = false,
animate = true,
updateSyncedCharts = true,
overwriteInitialConfig = true,
callback) {
chartInstance: Nullable<ApexCharts>,
options: any,
redraw = false,
animate = true,
updateSyncedCharts = true,
callback: CallBackFn
) {
nextTick(() => {
useTimeoutFn(() => {
chartInstance && chartInstance.updateOptions(options, redraw, animate, updateSyncedCharts);

chartInstance && chartInstance.updateOptions(
options,
redraw,
animate,
updateSyncedCharts,
overwriteInitialConfig);

callback && callback(chartInstance);

}, 30);
});
});
}

tryOnUnmounted(() => {
Expand Down
17 changes: 11 additions & 6 deletions src/hooks/web/useECharts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ export function useECharts(

function init() {
const el = unref(elRef);

if (!el || !unref(el)) {
return;
}

chartInstance = echarts.init(el, theme);
const { removeEvent } = useEventListener({
el: window,
Expand All @@ -33,31 +33,36 @@ export function useECharts(
});
removeResizeFn = removeEvent;
const { widthRef, screenEnum } = useBreakpoint();
if (unref(widthRef) <= screenEnum.MD) {
if (unref(widthRef) <= screenEnum.MD || el.offsetHeight === 0) {
useTimeoutFn(() => {
resizeFn();
}, 30);
}
}

function setOptions(options: any, clear = true) {
if (unref(elRef)?.offsetHeight === 0) {
useTimeoutFn(() => {
setOptions(options);
}, 30);
return;
}
nextTick(() => {
useTimeoutFn(() => {
if (!chartInstance) {
init();

if (!chartInstance) return;
}
clear && chartInstance.clear();
clear && chartInstance?.clear();

chartInstance && chartInstance.setOption(options);
chartInstance?.setOption(options);
}, 30);
});
}

function resize() {
if (!chartInstance) return;
chartInstance.resize();
chartInstance?.resize();
}

tryOnUnmounted(() => {
Expand Down
7 changes: 4 additions & 3 deletions src/layouts/default/sider/MixSider.vue
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,6 @@
getCanDrag,
getCloseMixSidebarOnChange,
getMenuTheme,
getMixSidebarTheme,
} = useMenuSetting();
const { title } = useGlobSetting();
Expand Down Expand Up @@ -193,7 +192,6 @@
title,
openMenu,
getMenuTheme,
getMixSidebarTheme,
};
},
});
Expand Down Expand Up @@ -290,9 +288,12 @@
}
}
> .scrollbar {
height: calc(100% - @header-height) !important;
}
&-module {
position: relative;
height: calc(100% - @header-height) !important;
padding-top: 1px;
&__item {
Expand Down
1 change: 0 additions & 1 deletion src/views/dashboard/analysis/components/AnalysisPie.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
{ value: 234, name: '其他', itemStyle: { color: '#7dd9b9' } },
];
export default defineComponent({
name: 'AnalysisLine',
props: basicProps,
setup() {
const chartRef = ref<HTMLDivElement | null>(null);
Expand Down
1 change: 0 additions & 1 deletion src/views/dashboard/analysis/components/TrendLine.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import { basicProps } from './props';
export default defineComponent({
name: 'AnalysisLine',
props: basicProps,
setup() {
const chartRef = ref<HTMLDivElement | null>(null);
Expand Down

0 comments on commit 5cbfb2a

Please sign in to comment.