From 68f5f5bdabc11fd9865fcd1dcca73fbfe07db13c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Mon, 11 Aug 2025 18:07:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=93=E5=AD=98=E6=95=B0=E6=8D=AE=E7=9C=8B?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- klp-ui/src/components/ChartWrapper/index.vue | 207 +++++++++ klp-ui/src/views/wms/ledger/index.vue | 1 - klp-ui/src/views/wms/stock/box.vue | 333 ++++---------- klp-ui/src/views/wms/stock/index.vue | 4 +- klp-ui/src/views/wms/stock/panels/bar.vue | 218 ++++++++++ .../src/views/wms/stock/panels/reattree.vue | 269 ++++++++++++ klp-ui/src/views/wms/stock/panels/resize.js | 85 ++++ .../src/views/wms/stock/panels/trendChart.vue | 406 ++++++++++++++++++ 8 files changed, 1264 insertions(+), 259 deletions(-) create mode 100644 klp-ui/src/components/ChartWrapper/index.vue create mode 100644 klp-ui/src/views/wms/stock/panels/bar.vue create mode 100644 klp-ui/src/views/wms/stock/panels/reattree.vue create mode 100644 klp-ui/src/views/wms/stock/panels/resize.js create mode 100644 klp-ui/src/views/wms/stock/panels/trendChart.vue diff --git a/klp-ui/src/components/ChartWrapper/index.vue b/klp-ui/src/components/ChartWrapper/index.vue new file mode 100644 index 00000000..7a91e740 --- /dev/null +++ b/klp-ui/src/components/ChartWrapper/index.vue @@ -0,0 +1,207 @@ + + + + + \ No newline at end of file diff --git a/klp-ui/src/views/wms/ledger/index.vue b/klp-ui/src/views/wms/ledger/index.vue index ee786d4c..01c18984 100644 --- a/klp-ui/src/views/wms/ledger/index.vue +++ b/klp-ui/src/views/wms/ledger/index.vue @@ -36,7 +36,6 @@ - diff --git a/klp-ui/src/views/wms/stock/panels/reattree.vue b/klp-ui/src/views/wms/stock/panels/reattree.vue new file mode 100644 index 00000000..517d54ee --- /dev/null +++ b/klp-ui/src/views/wms/stock/panels/reattree.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/klp-ui/src/views/wms/stock/panels/resize.js b/klp-ui/src/views/wms/stock/panels/resize.js new file mode 100644 index 00000000..28992ed9 --- /dev/null +++ b/klp-ui/src/views/wms/stock/panels/resize.js @@ -0,0 +1,85 @@ +// 防抖函数:避免频繁触发 resize +function debounce(fn, delay = 100) { + let timer = null; + return function (...args) { + if (timer) clearTimeout(timer); + timer = setTimeout(() => { + fn.apply(this, args); + timer = null; + }, delay); + }; +} + +export default { + data() { + return { + // 存储ResizeObserver实例 + resizeObserver: null, + // 标记是否已初始化监听 + isResizeListening: false + }; + }, + methods: { + /** + * 初始化尺寸监听 + * @param {HTMLElement} container - 图表容器DOM(默认取this.$refs.chartContainer) + */ + initResizeListener(container) { + // 防止重复初始化 + if (this.isResizeListening) return; + + // 默认使用组件内的chartContainer作为监听目标 + const target = container || this.$refs.chartContainer; + if (!target) { + console.warn('未找到图表容器,无法初始化尺寸监听'); + return; + } + + // 创建ResizeObserver实例 + this.resizeObserver = new ResizeObserver( + debounce(entries => { + // 触发图表重绘 + this.handleContainerResize(entries); + }) + ); + + // 开始监听容器尺寸变化 + this.resizeObserver.observe(target); + this.isResizeListening = true; + }, + + /** + * 处理容器尺寸变化 + * @param {ResizeObserverEntry[]} entries - ResizeObserver回调参数 + */ + handleContainerResize(entries) { + // 确保图表实例存在 + if (this.chart && this.chart.resize) { + // 调用ECharts的resize方法重绘图表 + this.chart.resize(); + } + }, + + /** + * 销毁尺寸监听 + */ + destroyResizeListener() { + if (this.resizeObserver) { + this.resizeObserver.disconnect(); + this.resizeObserver = null; + } + this.isResizeListening = false; + } + }, + // 组件挂载后初始化监听 + mounted() { + // 延迟初始化,确保DOM已渲染完成 + this.$nextTick(() => { + this.initResizeListener(); + }); + }, + // 组件销毁前清理监听 + beforeDestroy() { + this.destroyResizeListener(); + } +}; \ No newline at end of file diff --git a/klp-ui/src/views/wms/stock/panels/trendChart.vue b/klp-ui/src/views/wms/stock/panels/trendChart.vue new file mode 100644 index 00000000..bf0a223c --- /dev/null +++ b/klp-ui/src/views/wms/stock/panels/trendChart.vue @@ -0,0 +1,406 @@ + + + + +