From 53c1b6f5237d10ec4a2606b441be1336af38aaf1 Mon Sep 17 00:00:00 2001 From: wintsa <770775984@qq.com> Date: Tue, 12 May 2026 15:56:50 +0800 Subject: [PATCH] fix --- .../console-2026-05-12T03-32-51-357Z.log | 2 + .../console-2026-05-12T03-33-46-269Z.log | 8 + .../console-2026-05-12T03-38-57-686Z.log | 4 + .../console-2026-05-12T03-39-25-518Z.log | 1 + .../console-2026-05-12T03-41-17-981Z.log | 2 + .../console-2026-05-12T03-48-27-372Z.log | 1 + .../console-2026-05-12T03-50-50-051Z.log | 5 + .../console-2026-05-12T04-17-37-255Z.log | 1 + .../console-2026-05-12T04-19-14-036Z.log | 1 + .../console-2026-05-12T04-27-12-424Z.log | 5 + .../page-2026-05-12T03-32-52-698Z.yml | 81 ++++ .../page-2026-05-12T03-33-46-589Z.yml | 81 ++++ .../page-2026-05-12T03-38-57-987Z.yml | 81 ++++ .../page-2026-05-12T03-39-25-782Z.yml | 81 ++++ .../page-2026-05-12T03-41-18-222Z.yml | 81 ++++ .../page-2026-05-12T03-48-27-706Z.yml | 81 ++++ .../page-2026-05-12T03-50-50-349Z.yml | 81 ++++ .../page-2026-05-12T04-17-38-470Z.yml | 80 ++++ fullscreen-button-position.png | Bin 0 -> 79916 bytes src/App.tsx | 393 ++++++++++++++++-- src/styles.css | 38 +- vite-dev.log | 37 ++ 22 files changed, 1088 insertions(+), 57 deletions(-) create mode 100644 .playwright-mcp/console-2026-05-12T03-32-51-357Z.log create mode 100644 .playwright-mcp/console-2026-05-12T03-33-46-269Z.log create mode 100644 .playwright-mcp/console-2026-05-12T03-38-57-686Z.log create mode 100644 .playwright-mcp/console-2026-05-12T03-39-25-518Z.log create mode 100644 .playwright-mcp/console-2026-05-12T03-41-17-981Z.log create mode 100644 .playwright-mcp/console-2026-05-12T03-48-27-372Z.log create mode 100644 .playwright-mcp/console-2026-05-12T03-50-50-051Z.log create mode 100644 .playwright-mcp/console-2026-05-12T04-17-37-255Z.log create mode 100644 .playwright-mcp/console-2026-05-12T04-19-14-036Z.log create mode 100644 .playwright-mcp/console-2026-05-12T04-27-12-424Z.log create mode 100644 .playwright-mcp/page-2026-05-12T03-32-52-698Z.yml create mode 100644 .playwright-mcp/page-2026-05-12T03-33-46-589Z.yml create mode 100644 .playwright-mcp/page-2026-05-12T03-38-57-987Z.yml create mode 100644 .playwright-mcp/page-2026-05-12T03-39-25-782Z.yml create mode 100644 .playwright-mcp/page-2026-05-12T03-41-18-222Z.yml create mode 100644 .playwright-mcp/page-2026-05-12T03-48-27-706Z.yml create mode 100644 .playwright-mcp/page-2026-05-12T03-50-50-349Z.yml create mode 100644 .playwright-mcp/page-2026-05-12T04-17-38-470Z.yml create mode 100644 fullscreen-button-position.png diff --git a/.playwright-mcp/console-2026-05-12T03-32-51-357Z.log b/.playwright-mcp/console-2026-05-12T03-32-51-357Z.log new file mode 100644 index 0000000..33593cb --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T03-32-51-357Z.log @@ -0,0 +1,2 @@ +[ 1001ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 +[ 1337ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://127.0.0.1:5173/favicon.ico:0 diff --git a/.playwright-mcp/console-2026-05-12T03-33-46-269Z.log b/.playwright-mcp/console-2026-05-12T03-33-46-269Z.log new file mode 100644 index 0000000..ea07102 --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T03-33-46-269Z.log @@ -0,0 +1,8 @@ +[ 79ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 +[ 255622ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 +[ 255658ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 +[ 268128ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 +[ 268149ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 +[ 282018ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 +[ 282037ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 +[ 282064ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 diff --git a/.playwright-mcp/console-2026-05-12T03-38-57-686Z.log b/.playwright-mcp/console-2026-05-12T03-38-57-686Z.log new file mode 100644 index 0000000..76d949d --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T03-38-57-686Z.log @@ -0,0 +1,4 @@ +[ 47ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 +[ 194ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 +[ 244ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 +[ 293ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[0].value` cannot be set to `"reset"`; expecting a keyword such as 'line-menu', 'fibonacci-menu', 'text-menu', 'shape-menu', 'measurer-menu', 'line', 'horizontal-line', 'vertical-line', 'parallel-channel', 'disjoint-channel', 'fibonacci-retracement', 'fibonacci-retracement-trend-based', 'text', 'comment', 'callout', 'note' or 'clear', ignoring. @ http://127.0.0.1:5173/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=ae174d51:834 diff --git a/.playwright-mcp/console-2026-05-12T03-39-25-518Z.log b/.playwright-mcp/console-2026-05-12T03-39-25-518Z.log new file mode 100644 index 0000000..6615f89 --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T03-39-25-518Z.log @@ -0,0 +1 @@ +[ 26ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 diff --git a/.playwright-mcp/console-2026-05-12T03-41-17-981Z.log b/.playwright-mcp/console-2026-05-12T03-41-17-981Z.log new file mode 100644 index 0000000..44865ab --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T03-41-17-981Z.log @@ -0,0 +1,2 @@ +[ 32ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 +[ 371068ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 diff --git a/.playwright-mcp/console-2026-05-12T03-48-27-372Z.log b/.playwright-mcp/console-2026-05-12T03-48-27-372Z.log new file mode 100644 index 0000000..5d4153c --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T03-48-27-372Z.log @@ -0,0 +1 @@ +[ 99ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 diff --git a/.playwright-mcp/console-2026-05-12T03-50-50-051Z.log b/.playwright-mcp/console-2026-05-12T03-50-50-051Z.log new file mode 100644 index 0000000..cf863b3 --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T03-50-50-051Z.log @@ -0,0 +1,5 @@ +[ 77ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 +[ 1186370ms] [ERROR] The final argument passed to %s changed size between renders. The order and size of this array must remain constant. + +Previous: %s +Incoming: %s useEffect [false] [[object Object], , [object Object], false] @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:5627 diff --git a/.playwright-mcp/console-2026-05-12T04-17-37-255Z.log b/.playwright-mcp/console-2026-05-12T04-17-37-255Z.log new file mode 100644 index 0000000..38910c8 --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T04-17-37-255Z.log @@ -0,0 +1 @@ +[ 854ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 diff --git a/.playwright-mcp/console-2026-05-12T04-19-14-036Z.log b/.playwright-mcp/console-2026-05-12T04-19-14-036Z.log new file mode 100644 index 0000000..68165fe --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T04-19-14-036Z.log @@ -0,0 +1 @@ +[ 88ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 diff --git a/.playwright-mcp/console-2026-05-12T04-27-12-424Z.log b/.playwright-mcp/console-2026-05-12T04-27-12-424Z.log new file mode 100644 index 0000000..1aee6e2 --- /dev/null +++ b/.playwright-mcp/console-2026-05-12T04-27-12-424Z.log @@ -0,0 +1,5 @@ +[ 219ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 +[ 139728ms] [ERROR] Failed to load resource: the server responded with a status of 401 () @ https://nest.zwgczx.com/api/v1/zw/getBuildingFunctionCostFilterTree?key=templateLibrary¤ttime=1778560172021&__random__=1778560172021:0 +[ 142705ms] [ERROR] Failed to load resource: the server responded with a status of 401 () @ https://nest.zwgczx.com/api/v1/zw/getBuildingFunctionCostFilterTree?key=indicatorTree&templateId=3¤ttime=1778560175114&__random__=1778560175114:0 +[ 304362ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102 +[ 307069ms] [ERROR] Failed to load resource: the server responded with a status of 401 () @ https://nest.zwgczx.com/api/v1/zw/getBuildingFunctionCostFilterTree?key=indicatorTree&templateId=3¤ttime=1778560339458&__random__=1778560339458:0 diff --git a/.playwright-mcp/page-2026-05-12T03-32-52-698Z.yml b/.playwright-mcp/page-2026-05-12T03-32-52-698Z.yml new file mode 100644 index 0000000..9cd8a9d --- /dev/null +++ b/.playwright-mcp/page-2026-05-12T03-32-52-698Z.yml @@ -0,0 +1,81 @@ +- main [ref=e3]: + - generic: + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - region "年度费用模板" [ref=e4]: + - generic "筛选条件" [ref=e5]: + - button "模板库 1" [pressed] [ref=e6] [cursor=pointer]: + - img [ref=e7] + - generic [ref=e9]: 模板库 + - strong [ref=e10]: "1" + - button "指标树形" [ref=e11] [cursor=pointer]: + - img [ref=e12] + - generic [ref=e19]: 指标树形 + - button "省市区" [ref=e20] [cursor=pointer]: + - img [ref=e21] + - generic [ref=e25]: 省市区 + - button "自然地理区位" [ref=e26] [cursor=pointer]: + - img [ref=e27] + - generic [ref=e30]: 自然地理区位 + - button "设施类别" [ref=e31] [cursor=pointer]: + - img [ref=e32] + - generic [ref=e36]: 设施类别 + - button "建设阶段" [ref=e37] [cursor=pointer]: + - img [ref=e38] + - generic [ref=e43]: 建设阶段 + - button "规划形式" [ref=e44] [cursor=pointer]: + - img [ref=e45] + - generic [ref=e50]: 规划形式 + - region "年度总费用图表" [ref=e51]: + - generic [ref=e52]: + - button "纵坐标:造价(元)" [ref=e54] [cursor=pointer]: 造价(元) + - button "全屏(F11)" [ref=e55] [cursor=pointer] + - generic [ref=e57]: + - figure "图表,共有0个系列": + - generic [ref=e58]: + - img "interactive chart": + - generic: + - img + - img + - region [ref=e59] + - toolbar "标注" [ref=e60]: + - button "均" [disabled] [ref=e61]: + - generic: 均 + - button "Line Tool" [disabled] [ref=e62] + - button "Text Tool" [disabled] [ref=e63] + - button "Shape Tool" [disabled] [ref=e64] + - button "Fibonacci Tool" [disabled] [ref=e65] + - button "Clear annotations" [disabled] [ref=e66] + - status: + - generic: 请选择右侧分类项 + - toolbar "缩放" [ref=e67]: + - button "缩小" [disabled] [ref=e68] + - button "放大" [ref=e69] [cursor=pointer] + - button "左移" [disabled] [ref=e70] + - button "右移" [disabled] [ref=e71] + - button "重置" [disabled] [ref=e72] + - complementary "选择内容" [ref=e73]: + - tablist "选择内容切换项" [ref=e74]: + - tab "自然地理区位" [selected] [ref=e75] [cursor=pointer] + - tab "设施类别" [ref=e76] [cursor=pointer] + - tab "建设阶段" [ref=e77] [cursor=pointer] + - tab "规划形式" [ref=e78] [cursor=pointer] + - generic [ref=e79]: + - generic [ref=e80]: 自然地理区位 + - generic [ref=e81]: 加载中 \ No newline at end of file diff --git a/.playwright-mcp/page-2026-05-12T03-33-46-589Z.yml b/.playwright-mcp/page-2026-05-12T03-33-46-589Z.yml new file mode 100644 index 0000000..9cd8a9d --- /dev/null +++ b/.playwright-mcp/page-2026-05-12T03-33-46-589Z.yml @@ -0,0 +1,81 @@ +- main [ref=e3]: + - generic: + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - region "年度费用模板" [ref=e4]: + - generic "筛选条件" [ref=e5]: + - button "模板库 1" [pressed] [ref=e6] [cursor=pointer]: + - img [ref=e7] + - generic [ref=e9]: 模板库 + - strong [ref=e10]: "1" + - button "指标树形" [ref=e11] [cursor=pointer]: + - img [ref=e12] + - generic [ref=e19]: 指标树形 + - button "省市区" [ref=e20] [cursor=pointer]: + - img [ref=e21] + - generic [ref=e25]: 省市区 + - button "自然地理区位" [ref=e26] [cursor=pointer]: + - img [ref=e27] + - generic [ref=e30]: 自然地理区位 + - button "设施类别" [ref=e31] [cursor=pointer]: + - img [ref=e32] + - generic [ref=e36]: 设施类别 + - button "建设阶段" [ref=e37] [cursor=pointer]: + - img [ref=e38] + - generic [ref=e43]: 建设阶段 + - button "规划形式" [ref=e44] [cursor=pointer]: + - img [ref=e45] + - generic [ref=e50]: 规划形式 + - region "年度总费用图表" [ref=e51]: + - generic [ref=e52]: + - button "纵坐标:造价(元)" [ref=e54] [cursor=pointer]: 造价(元) + - button "全屏(F11)" [ref=e55] [cursor=pointer] + - generic [ref=e57]: + - figure "图表,共有0个系列": + - generic [ref=e58]: + - img "interactive chart": + - generic: + - img + - img + - region [ref=e59] + - toolbar "标注" [ref=e60]: + - button "均" [disabled] [ref=e61]: + - generic: 均 + - button "Line Tool" [disabled] [ref=e62] + - button "Text Tool" [disabled] [ref=e63] + - button "Shape Tool" [disabled] [ref=e64] + - button "Fibonacci Tool" [disabled] [ref=e65] + - button "Clear annotations" [disabled] [ref=e66] + - status: + - generic: 请选择右侧分类项 + - toolbar "缩放" [ref=e67]: + - button "缩小" [disabled] [ref=e68] + - button "放大" [ref=e69] [cursor=pointer] + - button "左移" [disabled] [ref=e70] + - button "右移" [disabled] [ref=e71] + - button "重置" [disabled] [ref=e72] + - complementary "选择内容" [ref=e73]: + - tablist "选择内容切换项" [ref=e74]: + - tab "自然地理区位" [selected] [ref=e75] [cursor=pointer] + - tab "设施类别" [ref=e76] [cursor=pointer] + - tab "建设阶段" [ref=e77] [cursor=pointer] + - tab "规划形式" [ref=e78] [cursor=pointer] + - generic [ref=e79]: + - generic [ref=e80]: 自然地理区位 + - generic [ref=e81]: 加载中 \ No newline at end of file diff --git a/.playwright-mcp/page-2026-05-12T03-38-57-987Z.yml b/.playwright-mcp/page-2026-05-12T03-38-57-987Z.yml new file mode 100644 index 0000000..2e2288d --- /dev/null +++ b/.playwright-mcp/page-2026-05-12T03-38-57-987Z.yml @@ -0,0 +1,81 @@ +- main [ref=e3]: + - generic: + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - region "年度费用模板" [ref=e4]: + - generic "筛选条件" [ref=e5]: + - button "模板库 1" [pressed] [ref=e6] [cursor=pointer]: + - img [ref=e7] + - generic [ref=e9]: 模板库 + - strong [ref=e10]: "1" + - button "指标树形" [ref=e11] [cursor=pointer]: + - img [ref=e12] + - generic [ref=e19]: 指标树形 + - button "省市区" [ref=e20] [cursor=pointer]: + - img [ref=e21] + - generic [ref=e25]: 省市区 + - button "自然地理区位" [ref=e26] [cursor=pointer]: + - img [ref=e27] + - generic [ref=e30]: 自然地理区位 + - button "设施类别" [ref=e31] [cursor=pointer]: + - img [ref=e32] + - generic [ref=e36]: 设施类别 + - button "建设阶段" [ref=e37] [cursor=pointer]: + - img [ref=e38] + - generic [ref=e43]: 建设阶段 + - button "规划形式" [ref=e44] [cursor=pointer]: + - img [ref=e45] + - generic [ref=e50]: 规划形式 + - region "年度总费用图表" [ref=e51]: + - generic [ref=e52]: + - button "纵坐标:造价(元)" [ref=e54] [cursor=pointer]: 造价(元) + - generic [ref=e55]: + - figure "图表,共有0个系列": + - generic [ref=e56]: + - img "interactive chart": + - generic: + - img + - img + - region [ref=e57] + - toolbar "标注" [ref=e58]: + - button "全屏(F11)" [disabled] [ref=e59] + - button "均" [disabled] [ref=e60]: + - generic: 均 + - button "Line Tool" [disabled] [ref=e61] + - button "Text Tool" [disabled] [ref=e62] + - button "Shape Tool" [disabled] [ref=e63] + - button "Fibonacci Tool" [disabled] [ref=e64] + - button "Clear annotations" [disabled] [ref=e65] + - status: + - generic: 请选择右侧分类项 + - toolbar "缩放" [ref=e66]: + - button "缩小" [disabled] [ref=e67] + - button "放大" [ref=e68] [cursor=pointer] + - button "左移" [disabled] [ref=e69] + - button "右移" [disabled] [ref=e70] + - button "重置" [disabled] [ref=e71] + - complementary "选择内容" [ref=e72]: + - tablist "选择内容切换项" [ref=e73]: + - tab "自然地理区位" [selected] [ref=e74] [cursor=pointer] + - tab "设施类别" [ref=e75] [cursor=pointer] + - tab "建设阶段" [ref=e76] [cursor=pointer] + - tab "规划形式" [ref=e77] [cursor=pointer] + - generic [ref=e78]: + - generic [ref=e79]: 自然地理区位 + - generic [ref=e80]: 加载中 \ No newline at end of file diff --git a/.playwright-mcp/page-2026-05-12T03-39-25-782Z.yml b/.playwright-mcp/page-2026-05-12T03-39-25-782Z.yml new file mode 100644 index 0000000..2e2288d --- /dev/null +++ b/.playwright-mcp/page-2026-05-12T03-39-25-782Z.yml @@ -0,0 +1,81 @@ +- main [ref=e3]: + - generic: + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - region "年度费用模板" [ref=e4]: + - generic "筛选条件" [ref=e5]: + - button "模板库 1" [pressed] [ref=e6] [cursor=pointer]: + - img [ref=e7] + - generic [ref=e9]: 模板库 + - strong [ref=e10]: "1" + - button "指标树形" [ref=e11] [cursor=pointer]: + - img [ref=e12] + - generic [ref=e19]: 指标树形 + - button "省市区" [ref=e20] [cursor=pointer]: + - img [ref=e21] + - generic [ref=e25]: 省市区 + - button "自然地理区位" [ref=e26] [cursor=pointer]: + - img [ref=e27] + - generic [ref=e30]: 自然地理区位 + - button "设施类别" [ref=e31] [cursor=pointer]: + - img [ref=e32] + - generic [ref=e36]: 设施类别 + - button "建设阶段" [ref=e37] [cursor=pointer]: + - img [ref=e38] + - generic [ref=e43]: 建设阶段 + - button "规划形式" [ref=e44] [cursor=pointer]: + - img [ref=e45] + - generic [ref=e50]: 规划形式 + - region "年度总费用图表" [ref=e51]: + - generic [ref=e52]: + - button "纵坐标:造价(元)" [ref=e54] [cursor=pointer]: 造价(元) + - generic [ref=e55]: + - figure "图表,共有0个系列": + - generic [ref=e56]: + - img "interactive chart": + - generic: + - img + - img + - region [ref=e57] + - toolbar "标注" [ref=e58]: + - button "全屏(F11)" [disabled] [ref=e59] + - button "均" [disabled] [ref=e60]: + - generic: 均 + - button "Line Tool" [disabled] [ref=e61] + - button "Text Tool" [disabled] [ref=e62] + - button "Shape Tool" [disabled] [ref=e63] + - button "Fibonacci Tool" [disabled] [ref=e64] + - button "Clear annotations" [disabled] [ref=e65] + - status: + - generic: 请选择右侧分类项 + - toolbar "缩放" [ref=e66]: + - button "缩小" [disabled] [ref=e67] + - button "放大" [ref=e68] [cursor=pointer] + - button "左移" [disabled] [ref=e69] + - button "右移" [disabled] [ref=e70] + - button "重置" [disabled] [ref=e71] + - complementary "选择内容" [ref=e72]: + - tablist "选择内容切换项" [ref=e73]: + - tab "自然地理区位" [selected] [ref=e74] [cursor=pointer] + - tab "设施类别" [ref=e75] [cursor=pointer] + - tab "建设阶段" [ref=e76] [cursor=pointer] + - tab "规划形式" [ref=e77] [cursor=pointer] + - generic [ref=e78]: + - generic [ref=e79]: 自然地理区位 + - generic [ref=e80]: 加载中 \ No newline at end of file diff --git a/.playwright-mcp/page-2026-05-12T03-41-18-222Z.yml b/.playwright-mcp/page-2026-05-12T03-41-18-222Z.yml new file mode 100644 index 0000000..2e2288d --- /dev/null +++ b/.playwright-mcp/page-2026-05-12T03-41-18-222Z.yml @@ -0,0 +1,81 @@ +- main [ref=e3]: + - generic: + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - region "年度费用模板" [ref=e4]: + - generic "筛选条件" [ref=e5]: + - button "模板库 1" [pressed] [ref=e6] [cursor=pointer]: + - img [ref=e7] + - generic [ref=e9]: 模板库 + - strong [ref=e10]: "1" + - button "指标树形" [ref=e11] [cursor=pointer]: + - img [ref=e12] + - generic [ref=e19]: 指标树形 + - button "省市区" [ref=e20] [cursor=pointer]: + - img [ref=e21] + - generic [ref=e25]: 省市区 + - button "自然地理区位" [ref=e26] [cursor=pointer]: + - img [ref=e27] + - generic [ref=e30]: 自然地理区位 + - button "设施类别" [ref=e31] [cursor=pointer]: + - img [ref=e32] + - generic [ref=e36]: 设施类别 + - button "建设阶段" [ref=e37] [cursor=pointer]: + - img [ref=e38] + - generic [ref=e43]: 建设阶段 + - button "规划形式" [ref=e44] [cursor=pointer]: + - img [ref=e45] + - generic [ref=e50]: 规划形式 + - region "年度总费用图表" [ref=e51]: + - generic [ref=e52]: + - button "纵坐标:造价(元)" [ref=e54] [cursor=pointer]: 造价(元) + - generic [ref=e55]: + - figure "图表,共有0个系列": + - generic [ref=e56]: + - img "interactive chart": + - generic: + - img + - img + - region [ref=e57] + - toolbar "标注" [ref=e58]: + - button "全屏(F11)" [disabled] [ref=e59] + - button "均" [disabled] [ref=e60]: + - generic: 均 + - button "Line Tool" [disabled] [ref=e61] + - button "Text Tool" [disabled] [ref=e62] + - button "Shape Tool" [disabled] [ref=e63] + - button "Fibonacci Tool" [disabled] [ref=e64] + - button "Clear annotations" [disabled] [ref=e65] + - status: + - generic: 请选择右侧分类项 + - toolbar "缩放" [ref=e66]: + - button "缩小" [disabled] [ref=e67] + - button "放大" [ref=e68] [cursor=pointer] + - button "左移" [disabled] [ref=e69] + - button "右移" [disabled] [ref=e70] + - button "重置" [disabled] [ref=e71] + - complementary "选择内容" [ref=e72]: + - tablist "选择内容切换项" [ref=e73]: + - tab "自然地理区位" [selected] [ref=e74] [cursor=pointer] + - tab "设施类别" [ref=e75] [cursor=pointer] + - tab "建设阶段" [ref=e76] [cursor=pointer] + - tab "规划形式" [ref=e77] [cursor=pointer] + - generic [ref=e78]: + - generic [ref=e79]: 自然地理区位 + - generic [ref=e80]: 加载中 \ No newline at end of file diff --git a/.playwright-mcp/page-2026-05-12T03-48-27-706Z.yml b/.playwright-mcp/page-2026-05-12T03-48-27-706Z.yml new file mode 100644 index 0000000..39185e9 --- /dev/null +++ b/.playwright-mcp/page-2026-05-12T03-48-27-706Z.yml @@ -0,0 +1,81 @@ +- main [ref=e3]: + - generic: + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - region "年度费用模板" [ref=e4]: + - generic "筛选条件" [ref=e5]: + - button "模板库 1" [pressed] [ref=e6] [cursor=pointer]: + - img [ref=e7] + - generic [ref=e9]: 模板库 + - strong [ref=e10]: "1" + - button "指标树形" [ref=e11] [cursor=pointer]: + - img [ref=e12] + - generic [ref=e19]: 指标树形 + - button "省市区" [ref=e20] [cursor=pointer]: + - img [ref=e21] + - generic [ref=e25]: 省市区 + - button "自然地理区位" [ref=e26] [cursor=pointer]: + - img [ref=e27] + - generic [ref=e30]: 自然地理区位 + - button "设施类别" [ref=e31] [cursor=pointer]: + - img [ref=e32] + - generic [ref=e36]: 设施类别 + - button "建设阶段" [ref=e37] [cursor=pointer]: + - img [ref=e38] + - generic [ref=e43]: 建设阶段 + - button "规划形式" [ref=e44] [cursor=pointer]: + - img [ref=e45] + - generic [ref=e50]: 规划形式 + - region "年度总费用图表" [ref=e51]: + - generic [ref=e52]: + - button "纵坐标:造价(元)" [ref=e54] [cursor=pointer]: 造价(元) + - generic [ref=e55]: + - figure "图表,共有0个系列": + - generic [ref=e56]: + - img "interactive chart": + - generic: + - img + - img + - region [ref=e57] + - toolbar "标注" [ref=e58]: + - button "均" [disabled] [ref=e59]: + - generic: 均 + - button "Line Tool" [disabled] [ref=e60] + - button "Text Tool" [disabled] [ref=e61] + - button "Shape Tool" [disabled] [ref=e62] + - button "Fibonacci Tool" [disabled] [ref=e63] + - button "全屏(F11)" [disabled] [ref=e64] + - button "Clear annotations" [disabled] [ref=e65] + - status: + - generic: 请选择右侧分类项 + - toolbar "缩放" [ref=e66]: + - button "缩小" [disabled] [ref=e67] + - button "放大" [ref=e68] [cursor=pointer] + - button "左移" [disabled] [ref=e69] + - button "右移" [disabled] [ref=e70] + - button "重置" [disabled] [ref=e71] + - complementary "选择内容" [ref=e72]: + - tablist "选择内容切换项" [ref=e73]: + - tab "自然地理区位" [selected] [ref=e74] [cursor=pointer] + - tab "设施类别" [ref=e75] [cursor=pointer] + - tab "建设阶段" [ref=e76] [cursor=pointer] + - tab "规划形式" [ref=e77] [cursor=pointer] + - generic [ref=e78]: + - generic [ref=e79]: 自然地理区位 + - generic [ref=e80]: 加载中 \ No newline at end of file diff --git a/.playwright-mcp/page-2026-05-12T03-50-50-349Z.yml b/.playwright-mcp/page-2026-05-12T03-50-50-349Z.yml new file mode 100644 index 0000000..39185e9 --- /dev/null +++ b/.playwright-mcp/page-2026-05-12T03-50-50-349Z.yml @@ -0,0 +1,81 @@ +- main [ref=e3]: + - generic: + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - region "年度费用模板" [ref=e4]: + - generic "筛选条件" [ref=e5]: + - button "模板库 1" [pressed] [ref=e6] [cursor=pointer]: + - img [ref=e7] + - generic [ref=e9]: 模板库 + - strong [ref=e10]: "1" + - button "指标树形" [ref=e11] [cursor=pointer]: + - img [ref=e12] + - generic [ref=e19]: 指标树形 + - button "省市区" [ref=e20] [cursor=pointer]: + - img [ref=e21] + - generic [ref=e25]: 省市区 + - button "自然地理区位" [ref=e26] [cursor=pointer]: + - img [ref=e27] + - generic [ref=e30]: 自然地理区位 + - button "设施类别" [ref=e31] [cursor=pointer]: + - img [ref=e32] + - generic [ref=e36]: 设施类别 + - button "建设阶段" [ref=e37] [cursor=pointer]: + - img [ref=e38] + - generic [ref=e43]: 建设阶段 + - button "规划形式" [ref=e44] [cursor=pointer]: + - img [ref=e45] + - generic [ref=e50]: 规划形式 + - region "年度总费用图表" [ref=e51]: + - generic [ref=e52]: + - button "纵坐标:造价(元)" [ref=e54] [cursor=pointer]: 造价(元) + - generic [ref=e55]: + - figure "图表,共有0个系列": + - generic [ref=e56]: + - img "interactive chart": + - generic: + - img + - img + - region [ref=e57] + - toolbar "标注" [ref=e58]: + - button "均" [disabled] [ref=e59]: + - generic: 均 + - button "Line Tool" [disabled] [ref=e60] + - button "Text Tool" [disabled] [ref=e61] + - button "Shape Tool" [disabled] [ref=e62] + - button "Fibonacci Tool" [disabled] [ref=e63] + - button "全屏(F11)" [disabled] [ref=e64] + - button "Clear annotations" [disabled] [ref=e65] + - status: + - generic: 请选择右侧分类项 + - toolbar "缩放" [ref=e66]: + - button "缩小" [disabled] [ref=e67] + - button "放大" [ref=e68] [cursor=pointer] + - button "左移" [disabled] [ref=e69] + - button "右移" [disabled] [ref=e70] + - button "重置" [disabled] [ref=e71] + - complementary "选择内容" [ref=e72]: + - tablist "选择内容切换项" [ref=e73]: + - tab "自然地理区位" [selected] [ref=e74] [cursor=pointer] + - tab "设施类别" [ref=e75] [cursor=pointer] + - tab "建设阶段" [ref=e76] [cursor=pointer] + - tab "规划形式" [ref=e77] [cursor=pointer] + - generic [ref=e78]: + - generic [ref=e79]: 自然地理区位 + - generic [ref=e80]: 加载中 \ No newline at end of file diff --git a/.playwright-mcp/page-2026-05-12T04-17-38-470Z.yml b/.playwright-mcp/page-2026-05-12T04-17-38-470Z.yml new file mode 100644 index 0000000..9dc7157 --- /dev/null +++ b/.playwright-mcp/page-2026-05-12T04-17-38-470Z.yml @@ -0,0 +1,80 @@ +- main [ref=e3]: + - generic: + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - generic: 众为数字化管理平台 + - region "年度费用模板" [ref=e4]: + - generic "筛选条件" [ref=e5]: + - button "省市区" [ref=e6] [cursor=pointer]: + - img [ref=e7] + - generic [ref=e11]: 省市区 + - button "自然地理区位" [ref=e12] [cursor=pointer]: + - img [ref=e13] + - generic [ref=e16]: 自然地理区位 + - button "设施类别" [ref=e17] [cursor=pointer]: + - img [ref=e18] + - generic [ref=e22]: 设施类别 + - button "建设阶段" [ref=e23] [cursor=pointer]: + - img [ref=e24] + - generic [ref=e29]: 建设阶段 + - button "规划形式" [ref=e30] [cursor=pointer]: + - img [ref=e31] + - generic [ref=e36]: 规划形式 + - region "年度总费用图表" [ref=e37]: + - generic [ref=e38]: + - button "纵坐标:造价(元)" [ref=e40] [cursor=pointer]: 造价(元) + - generic [ref=e41]: + - figure "图表,共有0个系列": + - generic [ref=e42]: + - img "interactive chart": + - generic: + - img + - img + - region [ref=e43] + - toolbar "标注" [ref=e44]: + - button "库" [disabled] [ref=e45]: + - generic: + - generic: 库 + - button "树" [disabled] [ref=e46]: + - generic: + - generic: 树 + - button "均" [disabled] [ref=e47]: + - generic: 均 + - button "Line Tool" [disabled] [ref=e48] + - button "Text Tool" [disabled] [ref=e49] + - button "Shape Tool" [disabled] [ref=e50] + - button "Fibonacci Tool" [disabled] [ref=e51] + - button "全屏(F11)" [disabled] [ref=e52] + - button "Clear annotations" [disabled] [ref=e53] + - status: + - generic: 请选择右侧分类项 + - toolbar "缩放" [ref=e54]: + - button "缩小" [disabled] [ref=e55] + - button "放大" [ref=e56] [cursor=pointer] + - button "左移" [disabled] [ref=e57] + - button "右移" [disabled] [ref=e58] + - button "重置" [disabled] [ref=e59] + - complementary "选择内容" [ref=e60]: + - tablist "选择内容切换项" [ref=e61]: + - tab "自然地理区位" [selected] [ref=e62] [cursor=pointer] + - tab "设施类别" [ref=e63] [cursor=pointer] + - tab "建设阶段" [ref=e64] [cursor=pointer] + - tab "规划形式" [ref=e65] [cursor=pointer] + - generic [ref=e66]: + - generic [ref=e67]: 自然地理区位 + - generic [ref=e68]: 加载中 \ No newline at end of file diff --git a/fullscreen-button-position.png b/fullscreen-button-position.png new file mode 100644 index 0000000000000000000000000000000000000000..52f47924b3976d21e808620296e2fc437d519ce6 GIT binary patch literal 79916 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

ggBo*G)dzw6n|yrHMJUf;nW#u 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 literal 0 HcmV?d00001 diff --git a/src/App.tsx b/src/App.tsx index f0d1000..e707e96 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,7 +2,7 @@ import { useEffect, useMemo, useRef, useState } from 'react'; import { AgCharts } from 'ag-charts-react'; import type { AgCartesianChartOptions } from 'ag-charts-community'; import { ModuleRegistry } from 'ag-charts-community'; -import { Building2, Construction, LayoutGrid, LocateFixed, MapPinned } from 'lucide-react'; +import { Building2, Construction, LayoutGrid, Library, LocateFixed, MapPinned, Waypoints } from 'lucide-react'; import { AnnotationsModule, ContextMenuModule, @@ -41,12 +41,15 @@ const contentOptions = [ ] as const; const filterOptions = [ + { key: 'templateLibrary', label: '模板库', icon: Library }, + { key: 'indicatorTree', label: '指标树形', icon: Waypoints }, { key: 'region', label: '省市区', icon: MapPinned }, { key: 'geoLocation', label: '自然地理区位', icon: LocateFixed }, { key: 'facilityType', label: '设施类别', icon: Building2 }, { key: 'constructionStage', label: '建设阶段', icon: Construction }, { key: 'planningForm', label: '规划形式', icon: LayoutGrid }, ] as const; +const chartFilterOptions = filterOptions.filter((option) => option.key !== 'templateLibrary' && option.key !== 'indicatorTree'); const browserTreeDefaults = { treetype: '256', @@ -96,6 +99,11 @@ const contentTreeConfigs = { } as const; const chartLineColors = ['#0078a8', '#d14d72', '#1f8f4d', '#d96f23', '#6b5cc8', '#0d7680', '#9a6b12', '#b24b38']; +const defaultTemplateFilterNode = { + id: '3', + filterKey: 'templateLibrary', + label: '默认模板', +} as const; // const mockGeoLocationPayload = { // checkStrictly: true, @@ -291,6 +299,60 @@ function normalizeTreeRows(rows: unknown[]): TreeNode[] { }); } +function normalizeFlatTemplateLibraryRows(rows: unknown[]): TreeNode[] { + return rows + .filter((row): row is Record => !!row && typeof row === 'object') + .map((row, index) => { + const id = readText(row, ['id', 'mainid', 'mbid']) || `node-${index}`; + const label = readText(row, ['mbmc', 'label', 'name', 'title', 'text']) || id; + return createFilterTreeNode(id, label); + }); +} + +function normalizeFlatIndicatorRows(rows: unknown[]): TreeNode[] { + const sourceRows = rows.filter((row): row is Record => !!row && typeof row === 'object'); + const rowsById = new Map>(); + const childrenByParent = new Map(); + + sourceRows.forEach((row, index) => { + const id = readText(row, ['zbid', 'zjzbk', 'id']) || `node-${index}`; + if (!id) return; + rowsById.set(id, row); + + const parentId = readText(row, ['sj', 'parentId', 'parentid', 'pid', 'pId']) || ''; + const children = childrenByParent.get(parentId) || []; + children.push(id); + childrenByParent.set(parentId, children); + }); + + const buildNode = (id: string): TreeNode => { + const row = rowsById.get(id) || {}; + const children = (childrenByParent.get(id) || []) + .filter((childId) => rowsById.has(childId)) + .map(buildNode); + const label = readText(row, ['label', 'name', 'title', 'text', 'zbbh', 'mbmc']) || id; + return { + id, + label, + children, + hasChildren: children.length > 0, + canClick: true, + expanded: children.length > 0, + loading: false, + loaded: true, + }; + }; + + return Array.from(rowsById.keys()) + .filter((id) => { + const row = rowsById.get(id); + if (!row) return false; + const parentId = readText(row, ['sj', 'parentId', 'parentid', 'pid', 'pId']) || ''; + return !parentId || parentId === '0' || parentId === '0_0' || !rowsById.has(parentId); + }) + .map(buildNode); +} + const regionFieldKeys = { provinceId: ['provinceId', 'province_id', 'provinceid', 'sfid', 'sf_id', 'shengId', 'sheng_id', 'sheng'], provinceName: ['provinceName', 'province_name', 'province', 'sfmc', 'sf', 'shengName', 'sheng_name', 'shengmc'], @@ -384,12 +446,56 @@ function getFilterSelectionKey(filterKey: FilterKey, nodeId: string) { return `${filterKey}:${nodeId}`; } -function getSeriesValueKey(index: number) { - return `amount${index}`; +function getSeriesValueKey(contentKey: ContentKey, nodeId: string) { + return `amount_${getSelectionKey(contentKey, nodeId).replace(/[^a-zA-Z0-9_]/g, '_')}`; +} + +function compareGroupNames(a: string, b: string) { + const numberA = Number(a); + const numberB = Number(b); + if (Number.isFinite(numberA) && Number.isFinite(numberB)) { + return numberA - numberB; + } + return a.localeCompare(b, 'zh-CN', { numeric: true }); } function isContentFilterKey(filterKey: FilterKey): filterKey is ContentKey { - return filterKey !== 'region'; + return Object.prototype.hasOwnProperty.call(contentTreeConfigs, filterKey); +} + +function isTemplateFilterKey(filterKey: FilterKey): filterKey is 'templateLibrary' { + return filterKey === 'templateLibrary'; +} + +function isIndicatorTreeFilterKey(filterKey: FilterKey): filterKey is 'indicatorTree' { + return filterKey === 'indicatorTree'; +} + +function isSingleSelectFilterKey(filterKey: FilterKey) { + return isTemplateFilterKey(filterKey) || isIndicatorTreeFilterKey(filterKey); +} + +function getDefaultTemplateFilterNodes(): SelectedFilterNode[] { + return [{ ...defaultTemplateFilterNode }]; +} + +function isDefaultTemplateSelection(nodes: SelectedFilterNode[]) { + return nodes.length === 1 && nodes[0]?.id === defaultTemplateFilterNode.id; +} + +function getDefaultIndicatorTreeFilterNodes(nodes: TreeNode[]): SelectedFilterNode[] { + const defaultNode = nodes[0]; + if (!defaultNode) return []; + return [{ + id: defaultNode.id, + filterKey: 'indicatorTree', + label: defaultNode.label, + }]; +} + +function isDefaultIndicatorTreeSelection(nodes: SelectedFilterNode[], treeNodes: TreeNode[]) { + const defaultNode = treeNodes[0]; + return Boolean(defaultNode) && nodes.length === 1 && nodes[0]?.id === defaultNode?.id; } function filterTreeNodesByKeyword(nodes: TreeNode[], keyword: string): TreeNode[] { @@ -516,6 +622,8 @@ function App() { planningForm: false, }); const filterTreeInitialLoadStartedRef = useRef>({ + templateLibrary: false, + indicatorTree: false, region: false, geoLocation: false, facilityType: false, @@ -553,6 +661,8 @@ function App() { const [loadError, setLoadError] = useState(null); const [loadingHint, setLoadingHint] = useState(''); const [filterTreeByKey, setFilterTreeByKey] = useState>({ + templateLibrary: [], + indicatorTree: [], region: [], geoLocation: [], facilityType: [], @@ -560,6 +670,8 @@ function App() { planningForm: [], }); const [filterTreeLoadingByKey, setFilterTreeLoadingByKey] = useState>({ + templateLibrary: false, + indicatorTree: false, region: false, geoLocation: false, facilityType: false, @@ -567,6 +679,8 @@ function App() { planningForm: false, }); const [filterTreeErrorByKey, setFilterTreeErrorByKey] = useState>({ + templateLibrary: null, + indicatorTree: null, region: null, geoLocation: null, facilityType: null, @@ -574,6 +688,8 @@ function App() { planningForm: null, }); const [filterSearchTreeByKey, setFilterSearchTreeByKey] = useState>({ + templateLibrary: [], + indicatorTree: [], region: [], geoLocation: [], facilityType: [], @@ -581,6 +697,8 @@ function App() { planningForm: [], }); const [filterSearchLoadingByKey, setFilterSearchLoadingByKey] = useState>({ + templateLibrary: false, + indicatorTree: false, region: false, geoLocation: false, facilityType: false, @@ -588,6 +706,8 @@ function App() { planningForm: false, }); const [filterSearchErrorByKey, setFilterSearchErrorByKey] = useState>({ + templateLibrary: null, + indicatorTree: null, region: null, geoLocation: null, facilityType: null, @@ -595,6 +715,8 @@ function App() { planningForm: null, }); const [appliedFilters, setAppliedFilters] = useState>({ + templateLibrary: getDefaultTemplateFilterNodes(), + indicatorTree: [], region: [], geoLocation: [], facilityType: [], @@ -607,6 +729,8 @@ function App() { const filterSearchComposingRef = useRef(false); const filterSearchTimerRef = useRef(null); const filterSearchRequestSeqRef = useRef>({ + templateLibrary: 0, + indicatorTree: 0, region: 0, geoLocation: 0, facilityType: 0, @@ -629,7 +753,14 @@ function App() { const activeFilterTreeError = filterModalKey ? trimmedFilterSearchValue ? filterSearchErrorByKey[filterModalKey] : filterTreeErrorByKey[filterModalKey] : null; - const activeFilterCount = Object.values(appliedFilters).reduce((total, nodes) => total + nodes.length, 0); + const selectedTemplateId = appliedFilters.templateLibrary[0]?.id || defaultTemplateFilterNode.id; + const defaultIndicatorTreeNodes = useMemo( + () => getDefaultIndicatorTreeFilterNodes(filterTreeByKey.indicatorTree), + [filterTreeByKey.indicatorTree], + ); + const activeFilterCount = Object.entries(appliedFilters).reduce((total, [key, nodes]) => ( + key === 'templateLibrary' && isDefaultTemplateSelection(nodes) ? total : total + nodes.length + ), 0); const chartEmptyText = selectedContentNodes.length === 0 ? '请选择右侧分类项' : activeFilterCount > 0 @@ -743,6 +874,36 @@ function App() { return flatRegionTree.length > 0 ? flatRegionTree : normalizeBackendTree(normalizeTreeRows(rows)); }; + const fetchTemplateLibraryTree = async (signal?: AbortSignal) => { + const response = await fetch(`${API_BASE_URL}/zw/getBuildingFunctionCostFilterTree?${buildQuery({ key: 'templateLibrary' })}`, { + signal, + headers: { + 'X-Requested-With': 'XMLHttpRequest', + }, + }); + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + const rows = pickArray(await response.json()); + const templateRows = normalizeFlatTemplateLibraryRows(rows); + return templateRows.length > 0 ? templateRows : normalizeBackendTree(normalizeTreeRows(rows)); + }; + + const fetchIndicatorTree = async (signal?: AbortSignal) => { + const response = await fetch(`${API_BASE_URL}/zw/getBuildingFunctionCostFilterTree?${buildQuery({ key: 'indicatorTree', templateId: selectedTemplateId })}`, { + signal, + headers: { + 'X-Requested-With': 'XMLHttpRequest', + }, + }); + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + const rows = pickArray(await response.json()); + const indicatorRows = normalizeFlatIndicatorRows(rows); + return indicatorRows.length > 0 ? indicatorRows : normalizeBackendTree(normalizeTreeRows(rows)); + }; + const fetchBackendFilterTreeSearch = async (filterKey: FilterKey, keyword: string, signal?: AbortSignal) => { const response = await fetch(`${API_BASE_URL}/zw/getBuildingFunctionCostFilterTreeSearch?${buildQuery({ key: filterKey, @@ -791,10 +952,21 @@ function App() { const nodes = await fetchRegionFilterTree(signal); return keyword?.trim() ? filterTreeNodesByKeyword(nodes, keyword) : nodes; } - if (keyword?.trim()) { + if (isTemplateFilterKey(filterKey)) { + const nodes = await fetchTemplateLibraryTree(signal); + return keyword?.trim() ? filterTreeNodesByKeyword(nodes, keyword) : nodes; + } + if (filterKey === 'indicatorTree') { + const nodes = await fetchIndicatorTree(signal); + return keyword?.trim() ? filterTreeNodesByKeyword(nodes, keyword) : nodes; + } + if (keyword?.trim() && isContentFilterKey(filterKey)) { return fetchBackendFilterTreeSearch(filterKey, keyword, signal); } - return loadContentTreeWithDefaultExpansion(filterKey); + if (isContentFilterKey(filterKey)) { + return loadContentTreeWithDefaultExpansion(filterKey); + } + return []; }; const toggleContentNode = (nodeId: string) => { @@ -880,6 +1052,17 @@ function App() { setLoading(false); }; + const resetIndicatorTreeState = () => { + filterTreeInitialLoadStartedRef.current.indicatorTree = false; + filterSearchRequestSeqRef.current.indicatorTree += 1; + setFilterTreeByKey((current) => ({ ...current, indicatorTree: [] })); + setFilterTreeLoadingByKey((current) => ({ ...current, indicatorTree: false })); + setFilterTreeErrorByKey((current) => ({ ...current, indicatorTree: null })); + setFilterSearchTreeByKey((current) => ({ ...current, indicatorTree: [] })); + setFilterSearchLoadingByKey((current) => ({ ...current, indicatorTree: false })); + setFilterSearchErrorByKey((current) => ({ ...current, indicatorTree: null })); + }; + const ensureFilterTreeLoaded = (filterKey: FilterKey) => { if (filterTreeByKey[filterKey].length > 0 || filterTreeInitialLoadStartedRef.current[filterKey]) return; @@ -904,7 +1087,11 @@ function App() { const openFilterModal = (filterKey: FilterKey) => { setFilterModalKey(filterKey); - setDraftFilterNodes(appliedFilters[filterKey]); + if (isIndicatorTreeFilterKey(filterKey) && appliedFilters[filterKey].length === 0 && defaultIndicatorTreeNodes.length > 0) { + setDraftFilterNodes(defaultIndicatorTreeNodes); + } else { + setDraftFilterNodes(appliedFilters[filterKey]); + } setFilterSearchValue(''); lastFilterSearchRef.current = ''; if (filterSearchTimerRef.current != null) { @@ -950,6 +1137,19 @@ function App() { return; } + if (isTemplateFilterKey(filterKey) || filterKey === 'indicatorTree') { + filterSearchTimerRef.current = window.setTimeout(() => { + setFilterSearchLoadingByKey((current) => ({ ...current, [filterKey]: true })); + setFilterSearchErrorByKey((current) => ({ ...current, [filterKey]: null })); + setFilterSearchTreeByKey((current) => ({ + ...current, + [filterKey]: filterTreeNodesByKeyword(filterTreeByKey[filterKey], keyword), + })); + setFilterSearchLoadingByKey((current) => ({ ...current, [filterKey]: false })); + }, 300); + return; + } + filterSearchTimerRef.current = window.setTimeout(() => { setFilterSearchLoadingByKey((current) => ({ ...current, [filterKey]: true })); setFilterSearchErrorByKey((current) => ({ ...current, [filterKey]: null })); @@ -1032,6 +1232,12 @@ function App() { setDraftFilterNodes((current) => { const selectionKey = getFilterSelectionKey(currentFilterKey, node.id); const exists = current.some((item) => getFilterSelectionKey(item.filterKey, item.id) === selectionKey); + if (isSingleSelectFilterKey(currentFilterKey)) { + if (exists) { + return current; + } + return [{ id: node.id, filterKey: currentFilterKey, label: node.label }]; + } if (exists) { return current.filter((item) => getFilterSelectionKey(item.filterKey, item.id) !== selectionKey); } @@ -1041,10 +1247,31 @@ function App() { const applyFilterModal = () => { if (!filterModalKey) return; - setAppliedFilters((current) => ({ - ...current, - [filterModalKey]: draftFilterNodes, - })); + let nextDraftNodes = draftFilterNodes; + if (isTemplateFilterKey(filterModalKey) && nextDraftNodes.length === 0) { + nextDraftNodes = getDefaultTemplateFilterNodes(); + } + if (isIndicatorTreeFilterKey(filterModalKey)) { + if (nextDraftNodes.length === 0) { + nextDraftNodes = defaultIndicatorTreeNodes; + } + if (isDefaultIndicatorTreeSelection(nextDraftNodes, filterTreeByKey.indicatorTree)) { + nextDraftNodes = []; + } + } + setAppliedFilters((current) => { + const nextFilters = { + ...current, + [filterModalKey]: nextDraftNodes, + }; + if (isTemplateFilterKey(filterModalKey)) { + nextFilters.indicatorTree = []; + } + return nextFilters; + }); + if (isTemplateFilterKey(filterModalKey)) { + resetIndicatorTreeState(); + } setChartDataBySelection({}); setLoadError(null); if (selectedContentNodes.length > 0) { @@ -1056,11 +1283,27 @@ function App() { }; const clearFilter = (filterKey: FilterKey) => { - if (appliedFilters[filterKey].length === 0) return; - setAppliedFilters((current) => ({ - ...current, - [filterKey]: [], - })); + const nextNodes = isTemplateFilterKey(filterKey) + ? getDefaultTemplateFilterNodes() + : isIndicatorTreeFilterKey(filterKey) + ? defaultIndicatorTreeNodes + : []; + if (appliedFilters[filterKey].length === nextNodes.length && appliedFilters[filterKey].every((node, index) => node.id === nextNodes[index]?.id)) { + return; + } + setAppliedFilters((current) => { + const nextFilters = { + ...current, + [filterKey]: nextNodes, + }; + if (isTemplateFilterKey(filterKey)) { + nextFilters.indicatorTree = []; + } + return nextFilters; + }); + if (isTemplateFilterKey(filterKey)) { + resetIndicatorTreeState(); + } setChartDataBySelection({}); setLoadError(null); if (selectedContentNodes.length > 0) { @@ -1104,6 +1347,13 @@ function App() { }); }, [activeContentKey, treeByContent]); + useEffect(() => { + if (filterModalKey !== 'indicatorTree') return; + if (draftFilterNodes.length > 0) return; + if (defaultIndicatorTreeNodes.length === 0) return; + setDraftFilterNodes(defaultIndicatorTreeNodes); + }, [defaultIndicatorTreeNodes, draftFilterNodes.length, filterModalKey]); + useEffect(() => { const controller = new AbortController(); @@ -1136,6 +1386,7 @@ function App() { body: JSON.stringify({ groupBy: groupKey, metric: requestMetricKey, + templateId: selectedTemplateId, filters: appliedFilterPayload, nodes: selectedContentNodes.map((node) => ({ key: getSelectionKey(node.contentKey, node.id), @@ -1171,16 +1422,37 @@ function App() { return () => { controller.abort(); }; - }, [appliedFilterPayload, chartQueryVersion, groupKey, metricKey, requestMetricKey, selectedContentNodes]); + }, [appliedFilterPayload, chartQueryVersion, groupKey, metricKey, requestMetricKey, selectedContentNodes, selectedTemplateId]); useEffect(() => { const frame = chartFrameRef.current; const fullscreenTarget = workspaceRef.current; if (!frame || !fullscreenTarget) return; - const getFullscreenButton = () => frame.querySelector('.chart-fullscreen-button'); + const getTemplateButton = () => frame.querySelector('.ag-charts-myButton-template')?.closest('.ag-charts-toolbar__button'); + const getIndicatorButton = () => frame.querySelector('.ag-charts-myButton-indicator')?.closest('.ag-charts-toolbar__button'); + const getFullscreenButton = () => frame.querySelector('.ag-charts-myButton-fullScreen')?.closest('.ag-charts-toolbar__button'); const getStatisticButton = () => frame.querySelector('.ag-charts-myButton-statistic')?.closest('.ag-charts-toolbar__button'); + const setButtonAttribute = (button: HTMLButtonElement, name: string, value: string) => { + if (button.getAttribute(name) !== value) { + button.setAttribute(name, value); + } + }; const syncToolbarButtons = () => { + const templateButton = getTemplateButton(); + if (templateButton) { + templateButton.classList.add('chart-template-button'); + setButtonAttribute(templateButton, 'aria-disabled', 'false'); + setButtonAttribute(templateButton, 'aria-expanded', String(filterModalKey === 'templateLibrary')); + } + + const indicatorButton = getIndicatorButton(); + if (indicatorButton) { + indicatorButton.classList.add('chart-indicator-button'); + setButtonAttribute(indicatorButton, 'aria-disabled', 'false'); + setButtonAttribute(indicatorButton, 'aria-expanded', String(filterModalKey === 'indicatorTree')); + } + const button = getFullscreenButton(); if (button) { let icon = button.querySelector('.ag-charts-myButton-fullScreen'); @@ -1190,7 +1462,10 @@ function App() { } const isFullscreen = document.fullscreenElement === fullscreenTarget; + button.classList.add('chart-fullscreen-button'); button.classList.toggle('ag-charts-toolbar__button--active', isFullscreen); + setButtonAttribute(button, 'aria-disabled', 'false'); + setButtonAttribute(button, 'aria-pressed', String(isFullscreen)); icon?.classList.toggle('anticon-arrow-salt', !isFullscreen); icon?.classList.toggle('anticon-shrink', isFullscreen); } @@ -1198,7 +1473,8 @@ function App() { const statisticButton = getStatisticButton(); if (statisticButton) { statisticButton.classList.add('chart-statistic-button'); - statisticButton.setAttribute('aria-expanded', String(statisticMenuOpen)); + setButtonAttribute(statisticButton, 'aria-disabled', 'false'); + setButtonAttribute(statisticButton, 'aria-expanded', String(statisticMenuOpen)); } }; @@ -1225,14 +1501,22 @@ function App() { const handleToolbarClick = (event: MouseEvent) => { const target = event.target as Element | null; const button = target?.closest( - '.chart-fullscreen-button, .chart-statistic-button', + '.chart-template-button, .chart-indicator-button, .chart-fullscreen-button, .chart-statistic-button', ); if (!button || !frame.contains(button)) return; event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); - if (button.classList.contains('chart-statistic-button')) { + if (button.classList.contains('chart-template-button')) { + setMetricMenuOpen(false); + setStatisticMenuOpen(false); + openFilterModal('templateLibrary'); + } else if (button.classList.contains('chart-indicator-button')) { + setMetricMenuOpen(false); + setStatisticMenuOpen(false); + openFilterModal('indicatorTree'); + } else if (button.classList.contains('chart-statistic-button')) { setMetricMenuOpen(false); setStatisticMenuOpen((open) => !open); } else { @@ -1245,14 +1529,22 @@ function App() { const target = event.target as Element | null; const button = target?.closest( - '.chart-fullscreen-button, .chart-statistic-button', + '.chart-template-button, .chart-indicator-button, .chart-fullscreen-button, .chart-statistic-button', ); if (!button || !frame.contains(button)) return; event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); - if (button.classList.contains('chart-statistic-button')) { + if (button.classList.contains('chart-template-button')) { + setMetricMenuOpen(false); + setStatisticMenuOpen(false); + openFilterModal('templateLibrary'); + } else if (button.classList.contains('chart-indicator-button')) { + setMetricMenuOpen(false); + setStatisticMenuOpen(false); + openFilterModal('indicatorTree'); + } else if (button.classList.contains('chart-statistic-button')) { setMetricMenuOpen(false); setStatisticMenuOpen((open) => !open); } else { @@ -1265,6 +1557,11 @@ function App() { }; const observer = new MutationObserver(syncToolbarButtons); + const initialSyncTimers = [ + window.setTimeout(syncToolbarButtons, 0), + window.setTimeout(syncToolbarButtons, 100), + window.setTimeout(syncToolbarButtons, 500), + ]; document.addEventListener('keydown', handleKeyDown, true); document.addEventListener('fullscreenchange', handleFullscreenChange); document.addEventListener('contextmenu', suppressBrowserContextMenu); @@ -1275,6 +1572,7 @@ function App() { syncToolbarButtons(); return () => { + initialSyncTimers.forEach((timer) => window.clearTimeout(timer)); document.removeEventListener('keydown', handleKeyDown, true); document.removeEventListener('fullscreenchange', handleFullscreenChange); document.removeEventListener('contextmenu', suppressBrowserContextMenu); @@ -1283,7 +1581,7 @@ function App() { frame.removeEventListener('keydown', handleToolbarKeyDown, true); observer.disconnect(); }; - }, [statisticMenuOpen]); + }, [appliedFilters, filterModalKey, filterTreeByKey, statisticMenuOpen]); const chartOptions = useMemo(() => { const groupNames: string[] = []; @@ -1296,11 +1594,12 @@ function App() { groupNames.push(datum.groupName); }); }); + groupNames.sort(compareGroupNames); const visibleData = groupNames.map((groupName) => { const row: Record = { groupName }; - selectedContentNodes.forEach((node, index) => { + selectedContentNodes.forEach((node) => { const datum = chartDataBySelection[getSelectionKey(node.contentKey, node.id)]?.find((item) => item.groupName === groupName); - row[getSeriesValueKey(index)] = datum?.[selectedValueKey] ?? null; + row[getSeriesValueKey(node.contentKey, node.id)] = datum?.[selectedValueKey] ?? null; }); return row; }); @@ -1363,6 +1662,16 @@ function App() { enabled: true, toolbar: { buttons: ([ + { + value: 'callout', + tooltip: '模板库', + label: '', + }, + { + value: 'text', + tooltip: '指标树形', + label: '', + }, { value: 'note', tooltip: '切换统计指标', @@ -1388,6 +1697,11 @@ function App() { value: 'fibonacci-menu', tooltip: 'Fibonacci Tool', }, + { + value: 'comment', + tooltip: '全屏(F11)', + label: '', + }, { icon: 'delete', value: 'clear', @@ -1396,13 +1710,14 @@ function App() { ] as unknown as NonNullable['toolbar']>['buttons']), }, }, - series: selectedContentNodes.map((node, index) => ({ + series: selectedContentNodes.map((node) => ({ type: 'line', xKey: 'groupName', - yKey: getSeriesValueKey(index), + yKey: getSeriesValueKey(node.contentKey, node.id), yName: `${node.label} ${seriesValueLabel}`, stroke: node.color, strokeWidth: 2, + connectMissingData: true, marker: { enabled: true, fill: node.color, @@ -1492,7 +1807,7 @@ function App() {

- {filterOptions.map((option) => { + {chartFilterOptions.map((option) => { const count = appliedFilters[option.key].length; const FilterIcon = option.icon; return ( @@ -1516,7 +1831,10 @@ function App() { type="button" title="清空全部筛选" onClick={() => { + resetIndicatorTreeState(); setAppliedFilters({ + templateLibrary: getDefaultTemplateFilterNodes(), + indicatorTree: [], region: [], geoLocation: [], facilityType: [], @@ -1593,9 +1911,6 @@ function App() { ) : null}
{loading || loadError ?
{loading ? loadingHint || '加载中' : loadError}
: null} - {loading ? (
@@ -1687,7 +2002,17 @@ function App() { )}