UNPKG

@dfsj/echarts

Version:

专业的水文曲线组件或构造函数以及通用的echart二次封装图表

168 lines (164 loc) 5.9 kB
/** * * @dfsj/echarts: 专业的水文曲线组件或构造函数以及通用的echart二次封装图表 * 版本: v3.7.0-alpha.4 * 作者:yangbo <1747837358@qq.com> * 日期:2025-07-10 10:24:30 * * */ import _defineProperty from '@babel/runtime/helpers/defineProperty'; import { computed, ref, watch, unref, nextTick } from 'vue'; import { useDebounceFn, tryOnUnmounted } from '@vueuse/core'; import { useTimeoutFn } from './useTimeout.js'; import { useEventListener } from './useEventListener.js'; import { useBreakpoint } from './useBreakpoint.js'; import '../lib/echarts.js'; import elementResizeDetectorMaker from 'element-resize-detector'; import '../plugins/Mark/markSeries.js'; import '../plugins/Mark/markView.js'; import '../plugins/Water/waterSeries.js'; import '../plugins/Water/waterView.js'; import { useEChartsThemes } from '../themes/useEChartsThemes.js'; import * as echarts from 'echarts/core'; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function useECharts(elRef, theme) { var _useEChartsThemes = useEChartsThemes(); _useEChartsThemes.setTheme; _useEChartsThemes.loadTheme; var globalTheme = _useEChartsThemes.theme; var erd = elementResizeDetectorMaker(); var echartsTheme = computed(function () { return theme !== null && theme !== void 0 ? theme : globalTheme.value; }); var chartInstance = null; var resizeFn = resize; var cacheOptions = ref({}); var removeResizeFn = function removeResizeFn() {}; resizeFn = useDebounceFn(resize, 200); var getOptions = computed(function () { if (echartsTheme.value !== 'dark') { return cacheOptions.value; } return _objectSpread({ backgroundColor: 'transparent' }, cacheOptions.value); }); function initCharts(t) { var el = unref(elRef); if (!el || !unref(el)) { return; } console.log('初始化', t); chartInstance = echarts.init(el, t); var _useEventListener = useEventListener({ el: window, name: 'resize', listener: resizeFn }), removeEvent = _useEventListener.removeEvent; bindObserver(); removeResizeFn = removeEvent; var _useBreakpoint = useBreakpoint(), widthRef = _useBreakpoint.widthRef, screenEnum = _useBreakpoint.screenEnum; if (unref(widthRef) <= screenEnum.MD || el.offsetHeight === 0) { useTimeoutFn(function () { resizeFn(); }, 30); } } function setOptions(options) { var _unref; var clear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; cacheOptions.value = options; if (((_unref = unref(elRef)) === null || _unref === void 0 ? void 0 : _unref.offsetHeight) === 0) { useTimeoutFn(function () { setOptions(unref(getOptions)); }, 30); return; } nextTick(function () { useTimeoutFn(function () { var _chartInstance, _chartInstance2; if (!chartInstance) { initCharts(echartsTheme.value); if (!chartInstance) return; } clear && ((_chartInstance = chartInstance) === null || _chartInstance === void 0 ? void 0 : _chartInstance.clear()); (_chartInstance2 = chartInstance) === null || _chartInstance2 === void 0 || _chartInstance2.setOption(unref(getOptions)); }, 30); }); } function resize() { var _chartInstance3; (_chartInstance3 = chartInstance) === null || _chartInstance3 === void 0 || _chartInstance3.resize(); } watch(function () { return echartsTheme.value; }, function (theme) { if (chartInstance) { chartInstance.dispose(); initCharts(theme); setOptions(cacheOptions.value); } }); tryOnUnmounted(function () { if (!chartInstance) return; removeResizeFn(); chartInstance.dispose(); chartInstance = null; unBindObserver(); erd = null; }); function getInstance() { if (!chartInstance) { initCharts(echartsTheme.value); } return chartInstance; } function bindObserver() { try { var _erd, _erd$listenTo; (_erd = erd) === null || _erd === void 0 || (_erd$listenTo = _erd.listenTo) === null || _erd$listenTo === void 0 || _erd$listenTo.call(_erd, elRef.value, observerHandle); } catch (e) { console.log({ e: e }); } } function unBindObserver() { try { var _erd2, _erd2$removeListener; (_erd2 = erd) === null || _erd2 === void 0 || (_erd2$removeListener = _erd2.removeListener) === null || _erd2$removeListener === void 0 || _erd2$removeListener.call(_erd2, elRef.value, observerHandle); } catch (e) { console.log({ e: e }); } } var prevWidth, prevHeight; function observerHandle(target) { var style = getComputedStyle(target); var currWidth = style.width, currHeight = style.height; if (prevHeight == currHeight && currWidth == prevWidth) { return; } else { prevWidth = currWidth; prevHeight = currHeight; } nextTick(function () { setTimeout(resize, 100); }); } return { setOptions: setOptions, resize: resize, echarts: echarts, getInstance: getInstance, container: elRef }; } export { useECharts };