系统整体功能测试

This commit is contained in:
guanpeng 2025-07-11 22:40:31 +08:00
parent e0e22da0fe
commit c1289830c2
1 changed files with 120 additions and 0 deletions

View File

@ -0,0 +1,120 @@
<template>
<div id="echarts" ref="chartRef" :style="echartsStyle" />
</template>
<script setup name="ECharts">
import { ref, onMounted, onBeforeUnmount, watch, computed, markRaw, nextTick, onActivated } from "vue";
import * as echarts from "echarts";
import { useDebounceFn } from "@vueuse/core";
import useAppStore from '@/store/modules/app'
const appStore = useAppStore()
const props = defineProps({
option: {
type: Object,
default: {},
required: true,
},
renderer: {
type: String,
default: "canvas" || "svg"
},
resize: {
type: Boolean,
default: true,
},
theme: {
type: Object || String,
default: "",
},
width: {
type: Number || String,
default: 0
},
height: {
type: Number || String,
default: 0
},
onClick: {
type: Function,
default: (event) => any,
},
})
const echartsStyle = computed(() => {
return props.width || props.height
? { height: props.height + "px", width: props.width + "px" }
: { height: "100%", width: "100%" };
});
const chartRef = ref(null);
const chartInstance = ref();
const draw = () => {
if (chartInstance.value) {
chartInstance.value.setOption(props.option, { notMerge: true });
}
};
watch(props, () => {
draw();
});
const handleClick = (event) => props.onClick && props.onClick(event);
const init = () => {
if (!chartRef.value) return;
chartInstance.value = echarts.getInstanceByDom(chartRef.value);
if (!chartInstance.value) {
chartInstance.value = markRaw(
echarts.init(chartRef.value, props.theme, {
renderer: props.renderer
})
);
chartInstance.value.on("click", handleClick);
draw();
}
};
const resize = () => {
if (chartInstance.value && props.resize) {
chartInstance.value.resize({ animation: { duration: 300 } });
}
};
const debouncedResize = useDebounceFn(resize, 300, { maxWait: 800 });
// /echarts
const isCollapse = computed(() => !appStore.sidebar.opened);
watch(
() => [isCollapse],
() => {
debouncedResize();
},
{ deep: true }
);
onMounted(() => {
nextTick(() => init());
window.addEventListener("resize", debouncedResize);
});
onActivated(() => {
if (chartInstance.value) {
chartInstance.value.resize();
}
});
onBeforeUnmount(() => {
chartInstance.value?.dispose();
window.removeEventListener("resize", debouncedResize);
});
defineExpose({
getInstance: () => chartInstance.value,
resize,
draw
});
</script>