This commit is contained in:
wintsa 2026-05-06 17:54:10 +08:00
parent 4afad5fe10
commit 36fee1f291
65 changed files with 2933 additions and 137 deletions

BIN
.gitnexus/lbug Normal file

Binary file not shown.

BIN
.gitnexus/lbug.wal Normal file

Binary file not shown.

View File

@ -0,0 +1,2 @@
[ 722ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=1239b0ae:20102
[ 1188ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://localhost:5174/favicon.ico:0

View File

@ -0,0 +1 @@
[ 399ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=1239b0ae:20102

View File

@ -0,0 +1 @@
[ 404ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=1239b0ae:20102

View File

@ -0,0 +1 @@
[ 380ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=1239b0ae:20102

View File

@ -0,0 +1,45 @@
[ 385ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=1239b0ae:20102
[ 339731ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://localhost:5174/src/App.tsx?t=1778054808761:0
[ 339731ms] [ERROR] [vite] Failed to reload /src/App.tsx. This could be due to syntax errors or importing non-existent modules. (see errors above) @ http://localhost:5174/@vite/client:808
[ 379590ms] [ERROR] AG Charts - required modules are not registered. Check if you have registered the modules:
import {
ModuleRegistry,
AnnotationsModule,
ZoomModule,
CrosshairModule,
} from 'ag-charts-enterprise';
ModuleRegistry.registerModules([
AnnotationsModule,
ZoomModule,
CrosshairModule,
]);
See https://www.ag-grid.com/charts/r/module-registry/ for more details. @ http://localhost:5174/node_modules/.vite/deps/chunk-ZFDKNY4I.js?v=1239b0ae:840
[ 379781ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 379885ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 379886ms] [ERROR] *********************************************** AG Charts Enterprise License *********************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 379886ms] [ERROR] ************************************************** License Key Not Found *************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 379886ms] [ERROR] * All AG Charts Enterprise features are unlocked for trial. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 379886ms] [ERROR] * If you want to hide the watermark please email info@ag-grid.com for a trial license key. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 379886ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 379886ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 379922ms] [ERROR] AG Charts - required modules are not registered. Check if you have registered the modules:
import {
ModuleRegistry,
AnnotationsModule,
ZoomModule,
CrosshairModule,
} from 'ag-charts-enterprise';
ModuleRegistry.registerModules([
AnnotationsModule,
ZoomModule,
CrosshairModule,
]);
See https://www.ag-grid.com/charts/r/module-registry/ for more details. @ http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:840
[ 397787ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://localhost:5174/src/styles.css?t=1778054867152:0
[ 397787ms] [ERROR] [vite] Failed to reload /src/styles.css. This could be due to syntax errors or importing non-existent modules. (see errors above) @ http://localhost:5174/@vite/client:808

View File

@ -0,0 +1,35 @@
[ 336ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 431ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 432ms] [ERROR] *********************************************** AG Charts Enterprise License *********************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 432ms] [ERROR] ************************************************** License Key Not Found *************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 432ms] [ERROR] * All AG Charts Enterprise features are unlocked for trial. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 432ms] [ERROR] * If you want to hide the watermark please email info@ag-grid.com for a trial license key. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 432ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 433ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 451ms] [ERROR] AG Charts - required modules are not registered. Check if you have registered the modules:
import {
ModuleRegistry,
AnnotationsModule,
ZoomModule,
CrosshairModule,
} from 'ag-charts-enterprise';
ModuleRegistry.registerModules([
AnnotationsModule,
ZoomModule,
CrosshairModule,
]);
See https://www.ag-grid.com/charts/r/module-registry/ for more details. @ http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:840
[ 37129ms] [ERROR] AG Charts error TypeError: Cannot read properties of undefined (reading 'getSharedToolbar')
at new AnnotationsToolbar (http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:11336:38)
at new _Annotations2 (http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:12206:20)
at Object.create (http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:13484:20)
at _CartesianChart2.applyModules (http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:39443:39)
at _CartesianChart2.applyOptions (http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:39210:33)
at http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:46912:18
at resultFn.group (http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:920:14)
at http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:46911:14
at http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:38587:15
at Mutex.dispatchNext (http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:14055:15) @ http://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:838

View File

@ -0,0 +1,8 @@
[ 346ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 424ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 425ms] [ERROR] *********************************************** AG Charts Enterprise License *********************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 425ms] [ERROR] ************************************************** License Key Not Found *************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 425ms] [ERROR] * All AG Charts Enterprise features are unlocked for trial. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 425ms] [ERROR] * If you want to hide the watermark please email info@ag-grid.com for a trial license key. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 425ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 425ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918

View File

@ -0,0 +1,8 @@
[ 427ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 504ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 504ms] [ERROR] *********************************************** AG Charts Enterprise License *********************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 505ms] [ERROR] ************************************************** License Key Not Found *************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 505ms] [ERROR] * All AG Charts Enterprise features are unlocked for trial. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 505ms] [ERROR] * If you want to hide the watermark please email info@ag-grid.com for a trial license key. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 505ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 505ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918

View File

@ -0,0 +1,65 @@
[ 79ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 163ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 163ms] [ERROR] *********************************************** AG Charts Enterprise License *********************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 163ms] [ERROR] ************************************************** License Key Not Found *************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 163ms] [ERROR] * All AG Charts Enterprise features are unlocked for trial. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 163ms] [ERROR] * If you want to hide the watermark please email info@ag-grid.com for a trial license key. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 163ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 164ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 239743ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 536067ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 636828ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 636895ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 636895ms] [ERROR] *********************************************** AG Charts Enterprise License *********************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 636895ms] [ERROR] ************************************************** License Key Not Found *************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 636895ms] [ERROR] * All AG Charts Enterprise features are unlocked for trial. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 636896ms] [ERROR] * If you want to hide the watermark please email info@ag-grid.com for a trial license key. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 636896ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 636896ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 636919ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 636971ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 662653ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 791507ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 791576ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 791576ms] [ERROR] *********************************************** AG Charts Enterprise License *********************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 791576ms] [ERROR] ************************************************** License Key Not Found *************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 791576ms] [ERROR] * All AG Charts Enterprise features are unlocked for trial. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 791577ms] [ERROR] * If you want to hide the watermark please email info@ag-grid.com for a trial license key. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 791577ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 791577ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 791601ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 791648ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 833852ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1021188ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 1021256ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1021257ms] [ERROR] *********************************************** AG Charts Enterprise License *********************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1021257ms] [ERROR] ************************************************** License Key Not Found *************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1021257ms] [ERROR] * All AG Charts Enterprise features are unlocked for trial. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 1021257ms] [ERROR] * If you want to hide the watermark please email info@ag-grid.com for a trial license key. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 1021257ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1021258ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1021287ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1021363ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1115872ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1147091ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 1147150ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1147150ms] [ERROR] *********************************************** AG Charts Enterprise License *********************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1147150ms] [ERROR] ************************************************** License Key Not Found *************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1147150ms] [ERROR] * All AG Charts Enterprise features are unlocked for trial. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 1147150ms] [ERROR] * If you want to hide the watermark please email info@ag-grid.com for a trial license key. * @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:923
[ 1147150ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1147151ms] [ERROR] **************************************************************************************************************************** @ http://localhost:5174/node_modules/.vite/deps/ag-charts-enterprise.js?v=2852bbef:918
[ 1147179ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1147247ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1221002ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1338641ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 1338737ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1338809ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1514622ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1529882ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 1529975ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 1530053ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 2003522ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 2025447ms] [WARNING] AG Charts - Option `annotations.toolbar.buttons[4].value` cannot be set to `"full-screen"`; 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://localhost:5174/node_modules/.vite/deps/chunk-XDC3NMYR.js?v=2852bbef:834
[ 2627035ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 2637890ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102

View File

@ -0,0 +1 @@
[ 83ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102

View File

@ -0,0 +1 @@
[ 83ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102

View File

@ -0,0 +1 @@
[ 100ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102

View File

@ -0,0 +1 @@
[ 76ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102

View File

@ -0,0 +1 @@
[ 403ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102

View File

@ -0,0 +1 @@
[ 415ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102

View File

@ -0,0 +1 @@
[ 440ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102

View File

@ -0,0 +1,2 @@
[ 113ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102
[ 33760ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://localhost:5174/node_modules/.vite/deps/react-dom_client.js?v=2852bbef:20102

View File

@ -0,0 +1,43 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- complementary "图表工具" [ref=e4]:
- button "选择" [ref=e5]
- button "文本" [ref=e7]:
- generic [ref=e8]: T
- button "折线" [ref=e9]
- button "列表" [ref=e11]
- button "放大" [ref=e13]
- button "删除" [ref=e15]
- region "年度费用模板" [ref=e17]:
- region "年度总费用图表" [ref=e18]:
- generic [ref=e19]:
- heading "年度总费用" [level=1] [ref=e20]
- button "编辑标题" [ref=e21]
- generic [ref=e24]:
- figure "chart, 1 series":
- generic [ref=e25]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- status
- complementary "右侧预留区域" [ref=e26]

View File

@ -0,0 +1,49 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- complementary "图表工具" [ref=e4]:
- button "选择" [ref=e5] [cursor=pointer]:
- img [ref=e27]
- button "文本" [ref=e7] [cursor=pointer]:
- generic [ref=e31]: T
- button "连线" [ref=e32] [cursor=pointer]:
- img [ref=e33]
- button "列表" [ref=e11] [cursor=pointer]:
- img [ref=e37]
- button "放大" [ref=e13] [cursor=pointer]:
- img [ref=e42]
- button "删除" [ref=e15] [cursor=pointer]:
- img [ref=e45]
- region "年度费用模板" [ref=e17]:
- region "年度总费用图表" [ref=e18]:
- generic [ref=e19]:
- heading "年度总费用" [level=1] [ref=e20]
- button "编辑标题" [ref=e21] [cursor=pointer]:
- img [ref=e48]
- generic [ref=e24]:
- figure "chart, 1 series":
- generic [ref=e25]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- status
- complementary "右侧预留区域" [ref=e26]

View File

@ -0,0 +1,49 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- complementary "图表工具" [ref=e4]:
- button "选择" [ref=e5] [cursor=pointer]:
- img [ref=e6]
- button "文本" [ref=e10] [cursor=pointer]:
- generic [ref=e11]: T
- button "连线" [ref=e12] [cursor=pointer]:
- img [ref=e13]
- button "列表" [ref=e17] [cursor=pointer]:
- img [ref=e18]
- button "放大" [ref=e23] [cursor=pointer]:
- img [ref=e24]
- button "删除" [ref=e27] [cursor=pointer]:
- img [ref=e28]
- region "年度费用模板" [ref=e31]:
- region "年度总费用图表" [ref=e32]:
- generic [ref=e33]:
- heading "年度总费用" [level=1] [ref=e34]
- button "编辑标题" [ref=e35] [cursor=pointer]:
- img [ref=e36]
- generic [ref=e40]:
- figure "chart, 1 series":
- generic [ref=e41]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- status
- complementary "右侧预留区域" [ref=e42]

View File

@ -0,0 +1,61 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- complementary "图表工具" [ref=e4]:
- button "选择" [pressed] [ref=e5] [cursor=pointer]:
- img [ref=e6]
- button "文本" [ref=e10] [cursor=pointer]:
- generic [ref=e11]: T
- button "连线" [ref=e12] [cursor=pointer]:
- img [ref=e13]
- button "列表" [ref=e17] [cursor=pointer]:
- img [ref=e18]
- button "放大" [ref=e23] [cursor=pointer]:
- img [ref=e24]
- button "删除" [ref=e27] [cursor=pointer]:
- img [ref=e28]
- region "年度费用模板" [ref=e31]:
- region "年度总费用图表" [ref=e32]:
- generic [ref=e33]:
- heading "年度总费用" [level=1] [ref=e34]
- button "编辑标题" [ref=e35] [cursor=pointer]:
- img [ref=e36]
- generic [ref=e39]:
- generic [ref=e40]:
- figure "chart, 1 series":
- generic [ref=e41]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- status
- generic "图表缩放工具" [ref=e42]:
- button "缩小" [disabled] [ref=e43]:
- img [ref=e44]
- button "放大" [ref=e47] [cursor=pointer]:
- img [ref=e48]
- button "左移" [disabled] [ref=e51]:
- img [ref=e52]
- button "右移" [disabled] [ref=e54]:
- img [ref=e55]
- button "重置" [disabled] [ref=e57]:
- img [ref=e58]
- complementary "右侧预留区域" [ref=e61]

View File

@ -0,0 +1,61 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- complementary "图表工具" [ref=e4]:
- button "选择" [pressed] [ref=e5] [cursor=pointer]:
- img [ref=e6]
- button "文本" [ref=e10] [cursor=pointer]:
- generic [ref=e11]: T
- button "连线" [ref=e12] [cursor=pointer]:
- img [ref=e13]
- button "列表" [ref=e17] [cursor=pointer]:
- img [ref=e18]
- button "放大" [ref=e23] [cursor=pointer]:
- img [ref=e24]
- button "删除" [ref=e27] [cursor=pointer]:
- img [ref=e28]
- region "年度费用模板" [ref=e31]:
- region "年度总费用图表" [ref=e32]:
- generic [ref=e33]:
- heading "年度总费用" [level=1] [ref=e34]
- button "编辑标题" [ref=e35] [cursor=pointer]:
- img [ref=e36]
- generic [ref=e39]:
- generic [ref=e40]:
- figure "chart, 1 series":
- generic [ref=e41]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- status
- generic "图表缩放工具" [ref=e42]:
- button "缩小" [disabled] [ref=e43]:
- img [ref=e44]
- button "放大" [ref=e47] [cursor=pointer]:
- img [ref=e48]
- button "左移" [disabled] [ref=e51]:
- img [ref=e52]
- button "右移" [disabled] [ref=e54]:
- img [ref=e55]
- button "重置" [disabled] [ref=e57]:
- img [ref=e58]
- complementary "右侧预留区域" [ref=e61]

View File

@ -0,0 +1,61 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- complementary "图表工具" [ref=e4]:
- button "选择" [pressed] [ref=e5] [cursor=pointer]:
- img [ref=e6]
- button "文本" [ref=e10] [cursor=pointer]:
- generic [ref=e11]: T
- button "连线" [ref=e12] [cursor=pointer]:
- img [ref=e13]
- button "列表" [ref=e17] [cursor=pointer]:
- img [ref=e18]
- button "放大" [ref=e23] [cursor=pointer]:
- img [ref=e24]
- button "删除" [ref=e27] [cursor=pointer]:
- img [ref=e28]
- region "年度费用模板" [ref=e31]:
- region "年度总费用图表" [ref=e32]:
- generic [ref=e33]:
- heading "年度总费用" [level=1] [ref=e34]
- button "编辑标题" [ref=e35] [cursor=pointer]:
- img [ref=e36]
- generic [ref=e39]:
- generic [ref=e40]:
- figure "chart, 1 series":
- generic [ref=e41]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- status
- generic "图表缩放工具" [ref=e42]:
- button "缩小" [disabled] [ref=e43]:
- img [ref=e44]
- button "放大" [ref=e47] [cursor=pointer]:
- img [ref=e48]
- button "左移" [disabled] [ref=e51]:
- img [ref=e52]
- button "右移" [disabled] [ref=e54]:
- img [ref=e55]
- button "重置" [disabled] [ref=e57]:
- img [ref=e58]
- complementary "右侧预留区域" [ref=e61]

View File

@ -0,0 +1,59 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- complementary "图表工具" [ref=e4]:
- button "选择" [pressed] [ref=e5] [cursor=pointer]:
- img [ref=e6]
- button "文本" [ref=e10] [cursor=pointer]:
- generic [ref=e11]: T
- button "连线" [ref=e12] [cursor=pointer]:
- img [ref=e13]
- button "列表" [ref=e17] [cursor=pointer]:
- img [ref=e18]
- button "放大" [ref=e23] [cursor=pointer]:
- img [ref=e24]
- button "删除" [ref=e27] [cursor=pointer]:
- img [ref=e28]
- region "年度费用模板" [ref=e31]:
- region "年度总费用图表" [ref=e32]:
- generic [ref=e33]:
- heading "年度总费用" [level=1] [ref=e34]
- button "编辑标题" [ref=e35] [cursor=pointer]:
- img [ref=e36]
- generic [ref=e39]:
- generic [ref=e40]:
- figure "chart, 1 series":
- generic [ref=e41]:
- img
- img "2021; 年度总费用; 220万"
- text: 年度(元)
- status
- generic "图表缩放工具" [ref=e42]:
- button "缩小" [ref=e43] [cursor=pointer]:
- img [ref=e44]
- button "放大" [active] [ref=e47] [cursor=pointer]:
- img [ref=e48]
- button "左移" [ref=e51] [cursor=pointer]:
- img [ref=e52]
- button "右移" [disabled] [ref=e54]:
- img [ref=e55]
- button "重置" [ref=e57] [cursor=pointer]:
- img [ref=e58]
- complementary "右侧预留区域" [ref=e61]

View File

@ -0,0 +1,59 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- complementary "图表工具" [ref=e4]:
- button "选择" [pressed] [ref=e5] [cursor=pointer]:
- img [ref=e6]
- button "文本" [ref=e10] [cursor=pointer]:
- generic [ref=e11]: T
- button "连线" [ref=e12] [cursor=pointer]:
- img [ref=e13]
- button "列表" [ref=e17] [cursor=pointer]:
- img [ref=e18]
- button "放大" [ref=e23] [cursor=pointer]:
- img [ref=e24]
- button "删除" [ref=e27] [cursor=pointer]:
- img [ref=e28]
- region "年度费用模板" [ref=e31]:
- region "年度总费用图表" [ref=e32]:
- generic [ref=e33]:
- heading "年度总费用" [level=1] [ref=e34]
- button "编辑标题" [ref=e35] [cursor=pointer]:
- img [ref=e36]
- generic [ref=e39]:
- generic [ref=e40]:
- figure "chart, 1 series":
- generic [ref=e41]:
- img
- img "2021; 年度总费用; 220万"
- text: 年度(元)
- status
- generic "图表缩放工具" [ref=e42]:
- button "缩小" [disabled] [ref=e43]:
- img [ref=e44]
- button "放大" [ref=e47] [cursor=pointer]:
- img [ref=e48]
- button "左移" [disabled] [ref=e51]:
- img [ref=e52]
- button "右移" [disabled] [ref=e54]:
- img [ref=e55]
- button "重置" [disabled] [ref=e57]:
- img [ref=e58]
- complementary "右侧预留区域" [ref=e61]

View File

@ -0,0 +1,35 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- status
- complementary "右侧预留区域" [ref=e13]

View File

@ -0,0 +1,49 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- region [ref=e13]
- region [ref=e14]
- toolbar "标注" [ref=e15]:
- button "Line Tool" [ref=e16] [cursor=pointer]
- button "Text Tool" [ref=e17] [cursor=pointer]
- button "Shape Tool" [ref=e18] [cursor=pointer]
- button "Fibonacci Tool" [ref=e19] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e20] [cursor=pointer]
- status
- toolbar "缩放" [ref=e21]:
- button "缩小" [disabled] [ref=e22] [cursor=pointer]
- button "放大" [ref=e23] [cursor=pointer]
- button "左移" [disabled] [ref=e24] [cursor=pointer]
- button "右移" [disabled] [ref=e25] [cursor=pointer]
- button "重置" [disabled] [ref=e26] [cursor=pointer]
- complementary "右侧预留区域" [ref=e27]

View File

@ -0,0 +1,49 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- region [ref=e13]
- region [ref=e14]
- toolbar "标注" [ref=e15]:
- button "Line Tool" [ref=e16] [cursor=pointer]
- button "Text Tool" [ref=e17] [cursor=pointer]
- button "Shape Tool" [ref=e18] [cursor=pointer]
- button "Fibonacci Tool" [ref=e19] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e20] [cursor=pointer]
- status
- toolbar "缩放" [ref=e21]:
- button "缩小" [disabled] [ref=e22] [cursor=pointer]
- button "放大" [ref=e23] [cursor=pointer]
- button "左移" [disabled] [ref=e24] [cursor=pointer]
- button "右移" [disabled] [ref=e25] [cursor=pointer]
- button "重置" [disabled] [ref=e26] [cursor=pointer]
- complementary "右侧预留区域" [ref=e27]

View File

@ -0,0 +1,49 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- region [ref=e13]
- region [ref=e14]
- toolbar "标注" [ref=e15]:
- button "Line Tool" [ref=e16] [cursor=pointer]
- button "Text Tool" [ref=e17] [cursor=pointer]
- button "Shape Tool" [ref=e18] [cursor=pointer]
- button "Fibonacci Tool" [ref=e19] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e20]
- status
- toolbar "缩放" [ref=e22]:
- button "缩小" [disabled] [ref=e23]
- button "放大" [ref=e24] [cursor=pointer]
- button "左移" [disabled] [ref=e25]
- button "右移" [disabled] [ref=e26]
- button "重置" [disabled] [ref=e27]
- complementary "右侧预留区域" [ref=e28]

View File

@ -0,0 +1,60 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img
- img "2021; 年度总费用; 220万"
- button "添加水平线" [ref=e29] [cursor=pointer]
- text: 年度(元)
- region [ref=e13]
- region [ref=e14]
- generic:
- generic:
- generic: "2023"
- generic:
- img
- generic:
- generic: 年度总费用
- generic: 345万
- toolbar "标注" [ref=e15]:
- button "Line Tool" [ref=e16] [cursor=pointer]
- button "Text Tool" [ref=e17] [cursor=pointer]
- button "Shape Tool" [ref=e18] [cursor=pointer]
- button "Fibonacci Tool" [ref=e19] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e20]
- status
- toolbar "缩放" [ref=e22]:
- button "缩小" [active] [ref=e23] [cursor=pointer]
- button "放大" [ref=e24] [cursor=pointer]
- button "左移" [ref=e25] [cursor=pointer]
- button "右移" [disabled] [ref=e26]
- button "重置" [ref=e27] [cursor=pointer]
- generic:
- generic: "2023"
- generic:
- generic: 754万
- complementary "右侧预留区域" [ref=e28]

View File

@ -0,0 +1,56 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img "2021; 年度总费用; 220万"
- img
- text: 年度(元)
- region [ref=e13]
- region [ref=e14]
- toolbar "标注" [ref=e15]:
- button "Line Tool" [ref=e16] [cursor=pointer]
- button "Text Tool" [expanded] [ref=e17] [cursor=pointer]
- button "Shape Tool" [ref=e18] [cursor=pointer]
- button "Fibonacci Tool" [ref=e19] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e20]
- status
- menu "文本标注" [ref=e32]:
- menuitem "文本" [active] [ref=e33] [cursor=pointer]:
- generic [ref=e35]: 文本
- menuitem "评论" [ref=e36] [cursor=pointer]:
- generic [ref=e38]: 评论
- menuitem "标注" [ref=e39] [cursor=pointer]:
- generic [ref=e41]: 标注
- menuitem "注释" [ref=e42] [cursor=pointer]:
- generic [ref=e44]: 注释
- toolbar "缩放" [ref=e22]:
- button "缩小" [ref=e23] [cursor=pointer]
- button "放大" [ref=e24] [cursor=pointer]
- button "左移" [disabled] [ref=e25]
- button "右移" [ref=e26] [cursor=pointer]
- button "重置" [ref=e27] [cursor=pointer]
- complementary "右侧预留区域" [ref=e28]

View File

@ -0,0 +1,51 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e10]:
- button "全屏(F11)" [ref=e11] [cursor=pointer]
- generic [ref=e13]:
- figure "图表共有1个系列":
- generic [ref=e14]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- region [ref=e15]
- region [ref=e16]
- toolbar "标注" [ref=e17]:
- button "Line Tool" [ref=e18] [cursor=pointer]
- button "Text Tool" [ref=e19] [cursor=pointer]
- button "Shape Tool" [ref=e20] [cursor=pointer]
- button "Fibonacci Tool" [ref=e21] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e22]
- status
- toolbar "缩放" [ref=e23]:
- button "缩小" [disabled] [ref=e24]
- button "放大" [ref=e25] [cursor=pointer]
- button "左移" [disabled] [ref=e26]
- button "右移" [disabled] [ref=e27]
- button "重置" [disabled] [ref=e28]
- complementary "右侧预留区域" [ref=e29]

View File

@ -0,0 +1,51 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e10]:
- button "全屏(F11)" [ref=e11] [cursor=pointer]
- generic [ref=e13]:
- figure "图表共有1个系列":
- generic [ref=e14]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- region [ref=e15]
- region [ref=e16]
- toolbar "标注" [ref=e17]:
- button "Line Tool" [ref=e18] [cursor=pointer]
- button "Text Tool" [ref=e19] [cursor=pointer]
- button "Shape Tool" [ref=e20] [cursor=pointer]
- button "Fibonacci Tool" [ref=e21] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e22]
- status
- toolbar "缩放" [ref=e23]:
- button "缩小" [disabled] [ref=e24]
- button "放大" [ref=e25] [cursor=pointer]
- button "左移" [disabled] [ref=e26]
- button "右移" [disabled] [ref=e27]
- button "重置" [disabled] [ref=e28]
- complementary "右侧预留区域" [ref=e29]

View File

@ -0,0 +1,51 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e10]:
- button "全屏(F11)" [ref=e11] [cursor=pointer]
- generic [ref=e13]:
- figure "图表共有1个系列":
- generic [ref=e14]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- region [ref=e15]
- region [ref=e16]
- toolbar "标注" [ref=e17]:
- button "Line Tool" [ref=e18] [cursor=pointer]
- button "Text Tool" [ref=e19] [cursor=pointer]
- button "Shape Tool" [ref=e20] [cursor=pointer]
- button "Fibonacci Tool" [ref=e21] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e22]
- status
- toolbar "缩放" [ref=e23]:
- button "缩小" [disabled] [ref=e24]
- button "放大" [ref=e25] [cursor=pointer]
- button "左移" [disabled] [ref=e26]
- button "右移" [disabled] [ref=e27]
- button "重置" [disabled] [ref=e28]
- complementary "右侧预留区域" [ref=e29]

View File

@ -0,0 +1,51 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e10]:
- button "全屏(F11)" [ref=e11] [cursor=pointer]
- generic [ref=e13]:
- figure "图表共有1个系列":
- generic [ref=e14]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- region [ref=e15]
- region [ref=e16]
- toolbar "标注" [ref=e17]:
- button "Line Tool" [ref=e18] [cursor=pointer]
- button "Text Tool" [ref=e19] [cursor=pointer]
- button "Shape Tool" [ref=e20] [cursor=pointer]
- button "Fibonacci Tool" [ref=e21] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e22]
- status
- toolbar "缩放" [ref=e23]:
- button "缩小" [disabled] [ref=e24]
- button "放大" [ref=e25] [cursor=pointer]
- button "左移" [disabled] [ref=e26]
- button "右移" [disabled] [ref=e27]
- button "重置" [disabled] [ref=e28]
- complementary "右侧预留区域" [ref=e29]

View File

@ -0,0 +1,51 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- heading "年度总费用" [level=1] [ref=e7]
- button "编辑标题" [ref=e8] [cursor=pointer]
- generic [ref=e10]:
- button "全屏(F11)" [ref=e11] [cursor=pointer]
- generic [ref=e13]:
- figure "图表共有1个系列":
- generic [ref=e14]:
- img "interactive chart":
- generic:
- img
- img
- text: 年度(元)
- region [ref=e15]
- region [ref=e16]
- toolbar "标注" [ref=e17]:
- button "Line Tool" [ref=e18] [cursor=pointer]
- button "Text Tool" [ref=e19] [cursor=pointer]
- button "Shape Tool" [ref=e20] [cursor=pointer]
- button "Fibonacci Tool" [ref=e21] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e22]
- status
- toolbar "缩放" [ref=e23]:
- button "缩小" [disabled] [ref=e24]
- button "放大" [ref=e25] [cursor=pointer]
- button "左移" [disabled] [ref=e26]
- button "右移" [disabled] [ref=e27]
- button "重置" [disabled] [ref=e28]
- complementary "右侧预留区域" [ref=e29]

View File

@ -0,0 +1,49 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- button "造价" [ref=e8] [cursor=pointer]
- button "全屏(F11)" [ref=e9] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img "interactive chart":
- generic:
- img
- img
- text: 造价(元)
- region [ref=e13]
- region [ref=e14]
- toolbar "标注" [ref=e15]:
- button "Line Tool" [ref=e16] [cursor=pointer]
- button "Text Tool" [ref=e17] [cursor=pointer]
- button "Shape Tool" [ref=e18] [cursor=pointer]
- button "Fibonacci Tool" [ref=e19] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e20]
- status
- toolbar "缩放" [ref=e21]:
- button "缩小" [disabled] [ref=e22]
- button "放大" [ref=e23] [cursor=pointer]
- button "左移" [disabled] [ref=e24]
- button "右移" [disabled] [ref=e25]
- button "重置" [disabled] [ref=e26]
- complementary "右侧预留区域" [ref=e27]

View File

@ -0,0 +1,48 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- button "造价(元)" [ref=e8] [cursor=pointer]
- button "全屏(F11)" [ref=e9] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img "interactive chart":
- generic:
- img
- img
- region [ref=e13]
- region [ref=e14]
- toolbar "标注" [ref=e15]:
- button "Line Tool" [ref=e16] [cursor=pointer]
- button "Text Tool" [ref=e17] [cursor=pointer]
- button "Shape Tool" [ref=e18] [cursor=pointer]
- button "Fibonacci Tool" [ref=e19] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e20]
- status
- toolbar "缩放" [ref=e21]:
- button "缩小" [disabled] [ref=e22]
- button "放大" [ref=e23] [cursor=pointer]
- button "左移" [disabled] [ref=e24]
- button "右移" [disabled] [ref=e25]
- button "重置" [disabled] [ref=e26]
- complementary "右侧预留区域" [ref=e27]

View File

@ -0,0 +1,48 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- button "造价(元)" [ref=e8] [cursor=pointer]
- button "全屏(F11)" [ref=e9] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img "interactive chart":
- generic:
- img
- img
- region [ref=e13]
- region [ref=e14]
- toolbar "标注" [ref=e15]:
- button "Line Tool" [ref=e16] [cursor=pointer]
- button "Text Tool" [ref=e17] [cursor=pointer]
- button "Shape Tool" [ref=e18] [cursor=pointer]
- button "Fibonacci Tool" [ref=e19] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e20]
- status
- toolbar "缩放" [ref=e21]:
- button "缩小" [disabled] [ref=e22]
- button "放大" [ref=e23] [cursor=pointer]
- button "左移" [disabled] [ref=e24]
- button "右移" [disabled] [ref=e25]
- button "重置" [disabled] [ref=e26]
- complementary "右侧预留区域" [ref=e27]

View File

@ -0,0 +1,54 @@
- 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]:
- region "年度总费用图表" [ref=e5]:
- generic [ref=e6]:
- generic [ref=e7]:
- button "造价(元)" [expanded] [active] [ref=e8] [cursor=pointer]
- menu "切换纵坐标指标" [ref=e28]:
- menuitem "造价(元)" [ref=e29] [cursor=pointer]
- menuitem "建筑面积指标(元/m²" [ref=e30] [cursor=pointer]
- menuitem "建造面积指标(元/m²" [ref=e31] [cursor=pointer]
- menuitem "使用面积指标(元/m²" [ref=e32] [cursor=pointer]
- button "全屏(F11)" [ref=e9] [cursor=pointer]
- generic [ref=e11]:
- figure "图表共有1个系列":
- generic [ref=e12]:
- img "interactive chart":
- generic:
- img
- img
- region [ref=e13]
- region [ref=e14]
- toolbar "标注" [ref=e15]:
- button "Line Tool" [ref=e16] [cursor=pointer]
- button "Text Tool" [ref=e17] [cursor=pointer]
- button "Shape Tool" [ref=e18] [cursor=pointer]
- button "Fibonacci Tool" [ref=e19] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e20]
- status
- toolbar "缩放" [ref=e21]:
- button "缩小" [disabled] [ref=e22]
- button "放大" [ref=e23] [cursor=pointer]
- button "左移" [disabled] [ref=e24]
- button "右移" [disabled] [ref=e25]
- button "重置" [disabled] [ref=e26]
- complementary "右侧预留区域" [ref=e27]

BIN
1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

View File

@ -6,6 +6,7 @@
"name": "agchart-service",
"dependencies": {
"ag-charts-community": "^13.2.1",
"ag-charts-enterprise": "13.2.1",
"ag-charts-react": "^13.2.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
@ -192,6 +193,8 @@
"ag-charts-core": ["ag-charts-core@13.2.1", "", { "dependencies": { "ag-charts-types": "13.2.1" } }, "sha512-Y7rk3kF+fA6bUMjU+vIzG5rRBd+8EKjyIjzNR2uV1+HyrlnOn6b7Eb9HPkDUoosWHhz+UNCOW/lYDzPP6mivHQ=="],
"ag-charts-enterprise": ["ag-charts-enterprise@13.2.1", "", { "dependencies": { "ag-charts-community": "13.2.1", "ag-charts-core": "13.2.1" } }, "sha512-QiNuNUu3o5qWUz9cPLuKr9r9k2YsO8Nwp4qJGR0s76WT6AeCmqKa12cSJrvIpwvPdjZ3PVlwsMA8s8EZ4dqrXA=="],
"ag-charts-locale": ["ag-charts-locale@13.2.1", "", {}, "sha512-lwwV/l/O187R4DYUfjm6p8LijITe46IlDz8nOxNQNJAOpkzs+cWmjSxfNiM1BMVCWTcMdah/AKN+6iihbDa8IA=="],
"ag-charts-react": ["ag-charts-react@13.2.1", "", { "dependencies": { "ag-charts-community": "13.2.1" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0" } }, "sha512-5t2DMM+MdQm5MOoGMnqTkri2vYrDbvvVOePBFvl6YU133dal1m5MOv+Srmv/J+139xzAOn1sCPuGwpl8yR1Snw=="],

BIN
chart-after-icons.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
chart-ag-native.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
chart-before.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
chart-controls-top.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
chart-native-fixed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
chart-tools-fixed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
chart-tools.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
chart-zoomed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

783
demo.html Normal file
View File

@ -0,0 +1,783 @@
<script type="text/javascript">
// 泛微的replaceAll方法不支持第一个入参为REGEXP需在此处重写replaceAll方法扩展其功能
(function () {
const nativeReplace = String.prototype.replace;
String.prototype.replaceAll = function (search, replacement) {
if (search instanceof RegExp) {
if (!search.global) {
throw new TypeError(
"replaceAll called with a non-global RegExp"
);
}
return nativeReplace.call(this, search, replacement);
}
return nativeReplace.call(
this,
new RegExp(search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'),
replacement
);
};
})();
// 禁止ModeForm的右键菜单
ModeForm.controlBtnDisabled(true);
const myGlobalParams = {};
window.myGlobalParams = myGlobalParams;
// 获取图形展示类型
// 0为日养费用趋势图1为日养指标趋势图
myGlobalParams.cardUrl_lx = ModeForm.getCardUrlInfo().lx;
switch (myGlobalParams.cardUrl_lx) {
case '1':
myGlobalParams.indicator_type = 0;
myGlobalParams.axes_y_Name = "指标(元/公里)";
myGlobalParams.axes_y_Formatter = axesYValueFormatterSD;
myGlobalParams.diyButtonArr = [{
value: 'type-select',
tooltip: '选择指标类型',
label: `<span class="ag-charts-myButton-type-select ag-charts-diy-button" style="font-size: 10px;">主线</span>`,
}];
myGlobalParams.zj = '0';
break;
case '2':
myGlobalParams.axes_y_Name = "结算(元)";
myGlobalParams.axes_y_Formatter = axesYValueFormatterTT;
myGlobalParams.diyButtonArr = [/*{
value: 'feeitem-select',
tooltip: '选择费用项目',
label: `<i class="icon-coms-search ag-charts-myButton-feeitem-select ag-charts-diy-button"></i>`,
}*/];
myGlobalParams.feeitem = '99';
break;
case '3':
myGlobalParams.indicator_type = 0;
myGlobalParams.axes_y_Name = "指标(元/公里)";
myGlobalParams.axes_y_Formatter = axesYValueFormatterSD;
myGlobalParams.diyButtonArr = [{
value: 'type-select',
tooltip: '选择指标类型',
label: `<span class="ag-charts-myButton-type-select ag-charts-diy-button" style="font-size: 10px;">主线</span>`,
}];
myGlobalParams.feeitem = '99';
break;
default:
myGlobalParams.axes_y_Name = "结算价(元)";
myGlobalParams.axes_y_Formatter = axesYValueFormatterTT;
myGlobalParams.diyButtonArr = [];
myGlobalParams.zj = 0;
break;
}
const { AgCharts } = agCharts;
myGlobalParams.updateChartTO = null;
myGlobalParams.paperTheme = {
palette: {
fills: ["#006f9b", "#ff7faa", "#00994d", "#ff8833", "#00a0dd"],
strokes: ["#003f58", "#934962", "#004a25", "#914d1d", "#006288"],
},
overrides: {
common: {
subtitle: {
text: "Paper Theme",
},
},
},
params: {
foregroundColor: "#262a33",
backgroundColor: "#fff1e5",
accentColor: "#0d7680",
fontFamily: '"Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", Arial, sans-serif',
fontSize: 14,
tooltipBackgroundColor: "#fff7ef",
tooltipTextColor: "#262a33",
},
};
myGlobalParams.options = {
container: document.getElementById("myChart"),
theme: myGlobalParams.paperTheme,
locale: {
localeText: agChartsLocale.AG_CHARTS_LOCALE_ZH_CN,
},
zoom: {
enabled: true,
anchorPointX: 'pointer',
anchorPointY: 'pointer',
},
annotations: {
enabled: true,
toolbar: {
buttons: myGlobalParams.diyButtonArr.concat([
{
icon: 'trend-line-drawing',
value: 'line-menu',
tooltip: 'Line Tool',
},
{
icon: 'text-annotation',
value: 'text-menu',
tooltip: 'Text Tool',
},
{
icon: 'arrow-drawing',
value: 'shape-menu',
tooltip: 'Shape Tool',
},
// {
// icon: 'measurer-drawing',
// value: 'measurer-menu',
// tooltip: 'Measurer Tool',
// },
{
icon: 'fibonacci-retracement-drawing',
value: 'fibonacci-menu',
tooltip: 'Fibonacci Tool',
},
{
value: 'full-screen',
tooltip: '全屏',
label: `<i class="anticon anticon-arrow-salt ag-charts-myButton-fullScreen ag-charts-diy-button"></i>`,
},
{
icon: 'delete',
value: 'clear',
tooltip: 'Clear annotations',
},
]),
},
},
legend: {
position: "right",
},
title: {
text: ` `,
},
axes: {
y: {
type: "number",
position: "left",
title: {
text: myGlobalParams.axes_y_Name,
},
crosshair: {
snap: false,
},
},
x: {
type: "category",
position: "bottom",
// title: {
// text: "Year",
// },
crosshair: {
snap: false,
},
},
},
formatter: {
y: myGlobalParams.axes_y_Formatter,
}
};
myGlobalParams.userid = ecodeSDK.getEcodeParams(['ecode_params'])._user.id;// String
// 获取series数据
let initialInterval = setInterval(async () => {
if ($(`#myChart`).length > 0) {
clearInterval(initialInterval);
let dockerH = $(`.coms-mode-docker.coms-mode-card`).height();
$(`.myChartRow`).css('height', `${dockerH - 52}px`);
let resStr1 = await $.post(`/api/esb/oa/execute?eventkey=ExecuteMySQL&params={"SQLID":"90","vars":[{"value":"${myGlobalParams.userid}"}],"maxRunNum":"3"}`);
let res = JSON.parse(resStr1).data.res.map(m => JSON.parse(m));
res.sort((a, b) => a.CJ.localeCompare(b.CJ));
if (res.length == 0) return;
myGlobalParams.compInfo = res[0];
await AgChartOptionHandler();
beforeAgChartFirstRender();
myGlobalParams.agChart = AgCharts.create(myGlobalParams.options);
// 添加全屏按钮
let myFullScreemIV = setInterval(() => {
if ($(`.ag-charts-myButton-fullScreen`).length > 0) {
clearInterval(myFullScreemIV);
$(`.ag-charts-myButton-fullScreen`)[0].parentNode.parentNode.addEventListener('keydown', agChartsDiyButtonKeyDownEvent);
$(`.ag-charts-myButton-fullScreen`)[0].parentNode.parentNode.addEventListener('click', function () {
$(`.ag-charts-toolbar__button--active`).removeClass('ag-charts-toolbar__button--active');
$(this).addClass('ag-charts-toolbar__button--active');
if (!document.fullscreenElement) {
$(`#myChart`)[0].requestFullscreen();
} else {
document.exitFullscreen();
}
});
document.addEventListener('fullscreenchange', () => {
if ($(`.ag-charts-myButton-fullScreen`).length > 0) {
if (!document.fullscreenElement) {
$(`.ag-charts-myButton-fullScreen`).removeClass('anticon-shrink');
$(`.ag-charts-myButton-fullScreen`).addClass('anticon-arrow-salt');
} else {
$(`.ag-charts-myButton-fullScreen`).removeClass('anticon-arrow-salt');
$(`.ag-charts-myButton-fullScreen`).addClass('anticon-shrink');
}
}
});
}
}, 50);
afterAgChartFirstRender();
}
}, 50);
function beforeAgChartFirstRender() {
}
function afterAgChartFirstRender() {
if (['1', '3'].includes(myGlobalParams.cardUrl_lx)) {
let myButtonIV1 = setInterval(() => {
if ($(`.ag-charts-myButton-type-select`).length > 0) {
clearInterval(myButtonIV1);
$(`.ag-charts-myButton-type-select`)[0].parentNode.parentNode.addEventListener('keydown', agChartsDiyButtonKeyDownEvent);
$(`.ag-charts-myButton-type-select`)[0].parentNode.parentNode.addEventListener('click', function () {
$(`.ag-charts-toolbar__button--active`).removeClass('ag-charts-toolbar__button--active');
$(this).addClass('ag-charts-toolbar__button--active');
$(`.ag-charts-canvas-overlay.ag-charts-tooltip-container>div:nth-child(4)`).append(`
<div role="menu" aria-orientation="vertical" class="ag-charts-menu ag-charts-popover ag-charts-annotations__toolbar-menu" aria-label="主线" style="right: unset; bottom: unset; left: 60px; top: 66px;">
<div role="menuitem" aria-disabled="false" class="ag-charts-menu__row ag-charts-diy-button-submenu" data-popover-id="select-zb-type-zx" tabindex="0">
<span class="ag-charts-menu__label ag-charts-diy-button-submenu-label">主线量里程指标</span>
</div>
<div role="menuitem" aria-disabled="false" class="ag-charts-menu__row ag-charts-diy-button-submenu" data-popover-id="select-zb-type-yh" tabindex="-1">
<span class="ag-charts-menu__label ag-charts-diy-button-submenu-label">养护量里程指标</span>
</div>
<div role="menuitem" aria-disabled="false" class="ag-charts-menu__row ag-charts-diy-button-submenu" data-popover-id="select-zb-type-sf" tabindex="-1">
<span class="ag-charts-menu__label ag-charts-diy-button-submenu-label">收费量里程指标</span>
</div>
<div role="menuitem" aria-disabled="false" class="ag-charts-menu__row ag-charts-diy-button-submenu" data-popover-id="select-zb-type-dl" tabindex="-1">
<span class="ag-charts-menu__label ag-charts-diy-button-submenu-label">四车道当量里程指标</span>
</div>
</div>
`);
$(`.ag-charts-diy-button-submenu`)[0].focus({ preventScroll: true });
let titles = ['主线', '养护', '收费', '当量'];
for (let i = 0; i < $(`.ag-charts-diy-button-submenu`).length; i++) {
$(`.ag-charts-diy-button-submenu`)[i].addEventListener('click', (e) => {
$(`.ag-charts-canvas-overlay.ag-charts-tooltip-container>div:nth-child(4)`).empty();
document.removeEventListener('mousedown', agChartsSubMenuEraser, true);
$(`.ag-charts-myButton-type-select`).text(titles[i]);
// 业务逻辑
clearInterval(myGlobalParams.updateChartTO);
myGlobalParams.indicator_type = i;
myGlobalParams.updateChartTO = setTimeout(async () => {
if (myGlobalParams.cardUrl_lx == 1) {
myGlobalParams.zj = ModeForm.getFieldValue('field293946');
if (myGlobalParams.zj.length == 0) {
myGlobalParams.options.data = [];
} else {
await AgChartOptionHandler();
}
} else if (myGlobalParams.cardUrl_lx == 3) {
let feeitem = ModeForm.getFieldValue('field294935');
if (feeitem.length == 0) {
$(`.ag-charts-title-diy-feeitem>span`)[0].innerHTML = '请选择费用项目';
myGlobalParams.options.data = [];
} else {
$(`.ag-charts-title-diy-feeitem>span`)[0].innerHTML = ModeForm.getBrowserShowName('field294935');
myGlobalParams.feeitem = feeitem.match(/\d+$/g)[0];
await AgChartOptionHandler();
}
}
myGlobalParams.agChart.updateDelta({ data: myGlobalParams.options.data });
}, 300);
});
$(`.ag-charts-diy-button-submenu`)[i].addEventListener('mouseenter', (e) => {
if (document.activeElement !== e.target) {
document.activeElement.setAttribute('tabindex', '-1');
e.target.setAttribute('tabindex', '0');
e.target.focus({ preventScroll: true });
}
});
$(`.ag-charts-diy-button-submenu`)[i].addEventListener('keydown', (e) => {
switch (e.key) {
case 'ArrowDown':
e.target.nextElementSibling?.focus({ preventScroll: true });
break;
case 'ArrowUp':
e.target.previousElementSibling?.focus({ preventScroll: true });
break;
case 'ArrowLeft':
agChartsSubMenuEraser();
$(`.ag-charts-myButton-type-select`)[0].parentNode.parentNode.focus({ preventScroll: true });
break;
case 'Escape':
agChartsSubMenuEraser();
$(`.ag-charts-myButton-type-select`)[0].parentNode.parentNode.focus({ preventScroll: true });
break;
default:
break;
}
});
}
document.addEventListener('mousedown', agChartsSubMenuEraser, true);
});
}
}, 50);
} else if (myGlobalParams.cardUrl_lx == 2) {
// let myButtonIV2 = setInterval(() => {
// if ($(`.ag-charts-myButton-feeitem-select`).length > 0) {
// clearInterval(myButtonIV2);
// $(`.ag-charts-myButton-feeitem-select`)[0].parentNode.parentNode.addEventListener('keydown', agChartsDiyButtonKeyDownEvent);
// $(`.ag-charts-myButton-feeitem-select`)[0].parentNode.parentNode.addEventListener('click', function () {
// $(`.ag-charts-toolbar__button--active`).removeClass('ag-charts-toolbar__button--active');
// $(this).addClass('ag-charts-toolbar__button--active');
// // 业务逻辑
// $(`#field294935span button`).click();
// });
// }
// }, 50);
}
// 增加表单字段 Component
if (['0', '1'].includes(myGlobalParams.cardUrl_lx)) {
let selectZJComp;
ModeForm.proxyFieldContentComp("field293946", function (info, compFn) {
selectZJComp = selectZJComp ? selectZJComp : compFn();
return compFn();
});
ModeForm.forceRenderField("field293946");
$(`#myChart`).prepend(`<div class="selectZJ" style="position: absolute; top: 10px; left: 0px; z-index: 1000; width: 100%;"></div>`);
ReactDOM.render(selectZJComp, $(`#myChart>div.selectZJ`)[0]);
} else if (['2', '3'].includes(myGlobalParams.cardUrl_lx)) {
$(`#myChart`).prepend(`<div class="ag-charts-title-diy-feeitem" style="display: flex; justify-content: center; align-items: center; font-size: 23px; position: absolute; top: 10px; left: 0px; z-index: 1000; width: 100%;"><span>年度总费用</span><div class="ag-charts-title-diy-feeitem-editor" style="padding-left: 5px;"></div></div>`);
let editComp = React.createElement(antd.Button, { size: 'small', type: 'dashed', icon: 'edit', onClick: () => $(`#field294935span button`).click() });
ReactDOM.render(editComp, $(`.ag-charts-title-diy-feeitem>div.ag-charts-title-diy-feeitem-editor`)[0]);
}
}
function agChartsDiyButtonKeyDownEvent(e) {
if (e.key == ' ' || e.key == 'Enter') {
this.click();
}
}
function agChartsSubMenuEraser(e = null) {
if (e && (e.target.classList.contains('ag-charts-diy-button-submenu') || e.target.classList.contains('ag-charts-diy-button-submenu-label'))) return;
$(`.ag-charts-canvas-overlay.ag-charts-tooltip-container>div:nth-child(4)`).empty();
document.removeEventListener('mousedown', agChartsSubMenuEraser, true);
}
ModeForm.bindFieldChangeEvent('field293946,field294935', async function (obj, id, value) {
clearInterval(myGlobalParams.updateChartTO);
if (id == 'field293946') {
myGlobalParams.updateChartTO = setTimeout(async () => {
myGlobalParams.zj = value;
if (myGlobalParams.zj.length == 0) {
myGlobalParams.options.data = [];
} else {
await AgChartOptionHandler();
}
myGlobalParams.agChart.updateDelta({ data: myGlobalParams.options.data });
}, 300);
} else if (id == 'field294935') {
myGlobalParams.updateChartTO = setTimeout(async () => {
if (value.length == 0) {
$(`.ag-charts-title-diy-feeitem>span`)[0].innerHTML = '请选择费用项目';
myGlobalParams.options.data = [];
} else {
$(`.ag-charts-title-diy-feeitem>span`)[0].innerHTML = ModeForm.getBrowserShowName(id);
myGlobalParams.feeitem = value.match(/\d+$/g)[0];
await AgChartOptionHandler();
}
myGlobalParams.agChart.updateDelta({ data: myGlobalParams.options.data });
}, 300);
}
});
async function AgChartOptionHandler() {
let res;
if (myGlobalParams.cardUrl_lx == 1) {
let resStr2 = await $.post(`/api/esb/oa/execute?eventkey=ExecuteMySQL&params={"SQLID":"91","vars":[{"value":"${myGlobalParams.compInfo.ID}"},{"value":"${myGlobalParams.indicator_type}"},{"value":"${myGlobalParams.zj}"}],"maxRunNum":"3"}`);
res = JSON.parse(resStr2).data.res.map(m => JSON.parse(m));
res.sort((a, b) => a.NF.localeCompare(b.NF));
res.sort((a, b) => a.LDJC.localeCompare(b.LDJC));
res.sort((a, b) => a.EJDW.localeCompare(b.EJDW));
} else if (myGlobalParams.cardUrl_lx == 2) {
let resStr2 = await $.post(`/api/esb/oa/execute?eventkey=ExecuteMySQL&params={"SQLID":"93","vars":[{"value":"1"},{"value":"${myGlobalParams.compInfo.ID}"},{"value":"${myGlobalParams.feeitem}"}],"maxRunNum":"3"}`);
res = JSON.parse(resStr2).data.res.map(m => JSON.parse(m));
res.sort((a, b) => a.NF.localeCompare(b.NF));
res.sort((a, b) => a.LDJC.localeCompare(b.LDJC));
res.sort((a, b) => a.EJDW.localeCompare(b.EJDW));
} else if (myGlobalParams.cardUrl_lx == 3) {
let resStr2 = await $.post(`/api/esb/oa/execute?eventkey=ExecuteMySQL&params={"SQLID":"94","vars":[{"value":"${myGlobalParams.compInfo.ID}"},{"value":"${myGlobalParams.indicator_type}"},{"value":"${myGlobalParams.feeitem}"}],"maxRunNum":"3"}`);
res = JSON.parse(resStr2).data.res.map(m => JSON.parse(m));
res.sort((a, b) => a.NF.localeCompare(b.NF));
res.sort((a, b) => a.LDJC.localeCompare(b.LDJC));
res.sort((a, b) => a.EJDW.localeCompare(b.EJDW));
} else {
let resStr2 = await $.post(`/api/esb/oa/execute?eventkey=ExecuteMySQL&params={"SQLID":"89","vars":[{"value":"${myGlobalParams.compInfo.ID}"},{"value":"${myGlobalParams.zj}"}],"maxRunNum":"3"}`);
res = JSON.parse(resStr2).data.res.map(m => JSON.parse(m));
res.sort((a, b) => a.NF.localeCompare(b.NF));
res.sort((a, b) => a.LDJC.localeCompare(b.LDJC));
res.sort((a, b) => a.EJDW.localeCompare(b.EJDW));
}
if (myGlobalParams.options.series) {
let data = getData(res, myGlobalParams.compInfo);
myGlobalParams.options.data = data;
} else {
let { series, data } = getDataAndSeries(res, myGlobalParams.compInfo);
myGlobalParams.options.data = data;
myGlobalParams.options.series = series;
}
}
function getData(data, companyInfo_GD) {
if (['1', '3'].includes(myGlobalParams.cardUrl_lx)) {
let res2 = [];
let totalMap = new Map();
let secTotalMap = new Map();
let yKey;
data.forEach((di, index) => {
if (companyInfo_GD.CJ == 1) {
if (secTotalMap.has(di.EJDW)) {
if (secTotalMap.get(di.EJDW).has(di.NF)) {
secTotalMap.get(di.EJDW).get(di.NF).set('fee', (secTotalMap.get(di.EJDW).get(di.NF).get('fee') || 0) + di.FY * 1);
secTotalMap.get(di.EJDW).get(di.NF).set('ldcd', (secTotalMap.get(di.EJDW).get(di.NF).get('ldcd') || 0) + di.CD * 1);
} else {
secTotalMap.get(di.EJDW).set(di.NF, new Map([['fee', di.FY * 1], ['ldcd', di.CD * 1]]));
}
} else {
secTotalMap.set(di.EJDW, new Map([[di.NF, new Map([['fee', di.FY * 1], ['ldcd', di.CD * 1]])]]));
}
}
if (totalMap.has(di.NF)) {
totalMap.get(di.NF).set('fee', (totalMap.get(di.NF).get('fee') || 0) + di.FY * 1);
totalMap.get(di.NF).set('ldcd', (totalMap.get(di.NF).get('ldcd') || 0) + di.CD * 1);
} else {
totalMap.set(di.NF, new Map([['fee', di.FY * 1], ['ldcd', di.CD * 1]]));
}
yKey = myGlobalParams.options.series.find(f => f.yName == di.LDJC).yKey;
res2.push(
{
year: di.NF,
[yKey]: di.ZBZ * 1,
}
);
});
let totalInd = [];
totalMap.forEach((value, key) => {
if (value.get('ldcd') != 0) {
totalInd.push({
year: key,
total: Math.round(value.get('fee') / value.get('ldcd') * 100) / 100,
});
}
});
totalInd.sort((a, b) => a.year.localeCompare(b.year));
if (companyInfo_GD.CJ == 1) {
secTotalMap.forEach((value, key) => {
let secTotalInd = [];
let yKeyi = myGlobalParams.options.series.find(f => f.yName == key).yKey;
value.forEach((v, k) => {
if (v.get('ldcd') != 0) {
secTotalInd.push({
year: k,
[yKeyi]: Math.round(v.get('fee') / v.get('ldcd') * 100) / 100,
});
}
});
secTotalInd.sort((a, b) => a.year.localeCompare(b.year));
totalInd = totalInd.concat(secTotalInd);
});
}
return totalInd.concat(res2);
} else if (['0', '2'].includes(myGlobalParams.cardUrl_lx)) {
let res2 = [];
let totalMap = new Map();
let secTotalMap = new Map();
let yKey;
data.forEach((di, index) => {
if (companyInfo_GD.CJ == 1) {
if (secTotalMap.has(di.EJDW)) {
secTotalMap.get(di.EJDW).set(di.NF, (secTotalMap.get(di.EJDW).get(di.NF) || 0) + di.FY * 1);
} else {
secTotalMap.set(di.EJDW, new Map([[di.NF, di.FY * 1]]));
}
}
totalMap.set(di.NF, (totalMap.get(di.NF) || 0) + di.FY * 1);
yKey = myGlobalParams.options.series.find(f => f.yName == di.LDJC).yKey;
res2.push(
{
year: di.NF,
[yKey]: di.FY * 1,
}
);
});
let totalFee = [];
totalMap.forEach((value, key) => {
totalFee.push({
year: key,
total: value,
});
});
totalFee.sort((a, b) => a.year.localeCompare(b.year));
if (companyInfo_GD.CJ == 1) {
secTotalMap.forEach((value, key) => {
let secTotalFee = [];
let yKeyi = myGlobalParams.options.series.find(f => f.yName == key).yKey;
value.forEach((v, k) => {
secTotalFee.push({
year: k,
[yKeyi]: v,
});
});
secTotalFee.sort((a, b) => a.year.localeCompare(b.year));
totalFee = totalFee.concat(secTotalFee);
});
}
return totalFee.concat(res2);
}
}
function getDataAndSeries(data, companyInfo_GDS) {
if (['1', '3'].includes(myGlobalParams.cardUrl_lx)) {
let res1 = [];
let res2 = [];
let lds = [];
let totalMap = new Map();
let secTotalMap = new Map();
let yKey;
data.forEach((di, index) => {
if (companyInfo_GDS.CJ == 1) {
if (secTotalMap.has(di.EJDW)) {
if (secTotalMap.get(di.EJDW).has(di.NF)) {
secTotalMap.get(di.EJDW).get(di.NF).set('fee', (secTotalMap.get(di.EJDW).get(di.NF).get('fee') || 0) + di.FY * 1);
secTotalMap.get(di.EJDW).get(di.NF).set('ldcd', (secTotalMap.get(di.EJDW).get(di.NF).get('ldcd') || 0) + di.CD * 1);
} else {
secTotalMap.get(di.EJDW).set(di.NF, new Map([['fee', di.FY * 1], ['ldcd', di.CD * 1]]));
}
} else {
secTotalMap.set(di.EJDW, new Map([[di.NF, new Map([['fee', di.FY * 1], ['ldcd', di.CD * 1]])]]));
}
}
if (totalMap.has(di.NF)) {
totalMap.get(di.NF).set('fee', (totalMap.get(di.NF).get('fee') || 0) + di.FY * 1);
totalMap.get(di.NF).set('ldcd', (totalMap.get(di.NF).get('ldcd') || 0) + di.CD * 1);
} else {
totalMap.set(di.NF, new Map([['fee', di.FY * 1], ['ldcd', di.CD * 1]]));
}
if (!lds.includes(di.LDJC)) {
yKey = `fee${lds.length}`;
lds.push(di.LDJC);
res1.push(
{
type: "line",
yKey: yKey,
yName: di.LDJC,
xKey: "year",
interpolation: { type: "smooth" },
visible: false,
}
);
} else {
yKey = `fee${lds.indexOf(di.LDJC)}`;
}
res2.push(
{
year: di.NF,
[yKey]: di.ZBZ * 1,
}
);
});
res1.sort((a, b) => a.yName.localeCompare(b.yName));
if (res1.length == 1) {
res1[0].visible = true;
return { series: res1, data: res2 };
}
let totalItem = [{
type: "line",
yKey: 'total',
yName: companyInfo_GDS.JC,
xKey: "year",
interpolation: { type: "smooth" },
visible: true,
}];
let totalInd = [];
totalMap.forEach((value, key) => {
if (value.get('ldcd') != 0) {
totalInd.push({
year: key,
total: Math.round(value.get('fee') / value.get('ldcd') * 100) / 100,
});
}
});
totalInd.sort((a, b) => a.year.localeCompare(b.year));
if (companyInfo_GDS.CJ == 1) {
let item = 0;
secTotalMap.forEach((value, key) => {
let secTotalInd = [];
item++;
let yKeyi = `total${item}`;
totalItem.push({
type: "line",
yKey: yKeyi,
yName: key,
xKey: "year",
interpolation: { type: "smooth" },
visible: false,
});
value.forEach((v, k) => {
if (v.get('ldcd') != 0) {
secTotalInd.push({
year: k,
[yKeyi]: Math.round(v.get('fee') / v.get('ldcd') * 100) / 100,
});
}
});
secTotalInd.sort((a, b) => a.year.localeCompare(b.year));
totalInd = totalInd.concat(secTotalInd);
});
}
return { series: totalItem.concat(res1), data: totalInd.concat(res2) };
} else {
let res1 = [];
let res2 = [];
let lds = [];
let totalMap = new Map();
let secTotalMap = new Map();
let yKey;
data.forEach((di, index) => {
if (companyInfo_GDS.CJ == 1) {
if (secTotalMap.has(di.EJDW)) {
secTotalMap.get(di.EJDW).set(di.NF, (secTotalMap.get(di.EJDW).get(di.NF) || 0) + di.FY * 1);
} else {
secTotalMap.set(di.EJDW, new Map([[di.NF, di.FY * 1]]));
}
}
totalMap.set(di.NF, (totalMap.get(di.NF) || 0) + di.FY * 1);
if (!lds.includes(di.LDJC)) {
yKey = `fee${lds.length}`;
lds.push(di.LDJC);
res1.push(
{
type: "line",
yKey: yKey,
yName: di.LDJC,
xKey: "year",
interpolation: { type: "smooth" },
visible: false,
}
);
} else {
yKey = `fee${lds.indexOf(di.LDJC)}`;
}
res2.push(
{
year: di.NF,
[yKey]: di.FY * 1,
}
);
});
res1.sort((a, b) => a.yName.localeCompare(b.yName));
if (res1.length == 1) {
res1[0].visible = true;
return { series: res1, data: res2 };
}
let totalItem = [{
type: "line",
yKey: 'total',
yName: companyInfo_GDS.JC,
xKey: "year",
interpolation: { type: "smooth" },
visible: true,
}];
let totalFee = [];
totalMap.forEach((value, key) => {
totalFee.push({
year: key,
total: value,
});
});
totalFee.sort((a, b) => a.year.localeCompare(b.year));
if (companyInfo_GDS.CJ == 1) {
let item = 0;
secTotalMap.forEach((value, key) => {
let secTotalFee = [];
item++;
let yKeyi = `total${item}`;
totalItem.push({
type: "line",
yKey: yKeyi,
yName: key,
xKey: "year",
interpolation: { type: "smooth" },
visible: false,
});
value.forEach((v, k) => {
secTotalFee.push({
year: k,
[yKeyi]: v,
});
});
secTotalFee.sort((a, b) => a.year.localeCompare(b.year));
totalFee = totalFee.concat(secTotalFee);
});
}
return { series: totalItem.concat(res1), data: totalFee.concat(res2) };
}
}
function axesYValueFormatterTT({ value }) {
if (value < 10000) {
return Number(value).toLocaleString('zh-CN', {
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
}
return `${(Number(value) / 10000).toLocaleString('zh-CN', {
minimumFractionDigits: 0,
maximumFractionDigits: 0,
})}万`;
}
function axesYValueFormatterSD({ value }) {
return Number(value).toLocaleString('zh-CN', {
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
}
</script>
<style type="text/css">
/* 隐藏右键菜单 */
.wea-right-menu-show {
display: none !important;
}
.wea-browser {
max-width: 100% !important;
}
.noDisplay {
display: none !important;
}
/* 扩展mask样式的适应性(如QQ浏览器) */
.ag-charts-icon {
-webkit-mask-image: var(--icon);
-webkit-mask-size: contain;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position: center;
}
</style>

BIN
left-toolbar-after.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
left-toolbar-before.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
left-toolbar-reset-last.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
metric-vertical-button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -11,6 +11,7 @@
},
"dependencies": {
"ag-charts-community": "^13.2.1",
"ag-charts-enterprise": "13.2.1",
"ag-charts-react": "^13.2.1",
"react": "^19.1.0",
"react-dom": "^19.1.0"

View File

@ -1,101 +1,364 @@
import { useMemo, useState } from 'react';
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 {
AnnotationsModule,
ContextMenuModule,
CrosshairModule,
LicenseManager,
ZoomModule,
} from 'ag-charts-enterprise';
import { AG_CHARTS_LOCALE_ZH_CN } from 'ag-charts-locale';
const revenueData = [
{ month: '1月', revenue: 146, orders: 92, margin: 36 },
{ month: '2月', revenue: 158, orders: 101, margin: 39 },
{ month: '3月', revenue: 171, orders: 117, margin: 43 },
{ month: '4月', revenue: 185, orders: 126, margin: 45 },
{ month: '5月', revenue: 193, orders: 133, margin: 47 },
{ month: '6月', revenue: 221, orders: 148, margin: 52 },
LicenseManager.setLicenseKey('[v3][RELEASE][0102]_NDg2Njc4MzY3MDgzNw==16d78ca762fb5d2ff740aed081e2af7b');
ModuleRegistry.registerModules([AnnotationsModule, ContextMenuModule, ZoomModule, CrosshairModule]);
const yearlyCostData = [
{ year: '2021', cost: 2200000, buildingArea: 18600, builtArea: 17200, usableArea: 14800 },
{ year: '2022', cost: 2500000, buildingArea: 19100, builtArea: 17600, usableArea: 15300 },
{ year: '2023', cost: 3450000, buildingArea: 20600, builtArea: 19000, usableArea: 16400 },
{ year: '2024', cost: 9600000, buildingArea: 24800, builtArea: 23200, usableArea: 20100 },
{ year: '2025', cost: null, buildingArea: null, builtArea: null, usableArea: null },
];
function App() {
const [chartType, setChartType] = useState<'bar' | 'line'>('bar');
const metricOptions = [
{ key: 'cost', label: '造价(元)', shortLabel: '造价' },
{ key: 'buildingArea', label: '建筑面积指标(元/m²', shortLabel: '建筑' },
{ key: 'builtArea', label: '建造面积指标(元/m²', shortLabel: '建造' },
{ key: 'usableArea', label: '使用面积指标(元/m²', shortLabel: '使用' },
] as const;
const chartOptions = useMemo<AgCartesianChartOptions>(
() => ({
title: {
text: '业务趋势',
type MetricKey = (typeof metricOptions)[number]['key'];
function formatWan(value: number) {
return `${Math.round(value / 10000).toLocaleString('zh-CN')}`;
}
function App() {
const workspaceRef = useRef<HTMLElement>(null);
const chartFrameRef = useRef<HTMLDivElement>(null);
const [metricKey, setMetricKey] = useState<MetricKey>('cost');
const [metricMenuOpen, setMetricMenuOpen] = useState(false);
const selectedMetric = metricOptions.find((option) => option.key === metricKey) ?? metricOptions[0];
useEffect(() => {
const frame = chartFrameRef.current;
const fullscreenTarget = workspaceRef.current;
if (!frame || !fullscreenTarget) return;
const getFullscreenButton = () => frame.querySelector<HTMLButtonElement>('.chart-fullscreen-button');
const syncFullscreenButton = () => {
const button = getFullscreenButton();
if (!button) return;
let icon = button.querySelector<HTMLElement>('.ag-charts-myButton-fullScreen');
if (!icon) {
button.innerHTML = '<i class="anticon anticon-arrow-salt ag-charts-myButton-fullScreen ag-charts-diy-button"></i>';
icon = button.querySelector<HTMLElement>('.ag-charts-myButton-fullScreen');
}
const isFullscreen = document.fullscreenElement === fullscreenTarget;
button.classList.toggle('ag-charts-toolbar__button--active', isFullscreen);
icon?.classList.toggle('anticon-arrow-salt', !isFullscreen);
icon?.classList.toggle('anticon-shrink', isFullscreen);
};
const toggleFullscreen = () => {
if (document.fullscreenElement === fullscreenTarget) {
void document.exitFullscreen();
} else {
void fullscreenTarget.requestFullscreen();
}
};
const handleKeyDown = (event: KeyboardEvent) => {
if (event.key !== 'F11') return;
event.preventDefault();
event.stopPropagation();
toggleFullscreen();
};
const handleFullscreenChange = () => {
syncFullscreenButton();
};
const handleToolbarClick = (event: MouseEvent) => {
const target = event.target as Element | null;
const button = target?.closest<HTMLButtonElement>(
'.chart-fullscreen-button',
);
if (!button || !frame.contains(button)) return;
event.preventDefault();
event.stopPropagation();
toggleFullscreen();
};
const handleToolbarKeyDown = (event: KeyboardEvent) => {
if (event.key !== ' ' && event.key !== 'Enter') return;
const target = event.target as Element | null;
const button = target?.closest<HTMLButtonElement>(
'.chart-fullscreen-button',
);
if (!button || !frame.contains(button)) return;
event.preventDefault();
event.stopPropagation();
toggleFullscreen();
};
const suppressBrowserContextMenu = (event: MouseEvent) => {
event.preventDefault();
};
const observer = new MutationObserver(syncFullscreenButton);
document.addEventListener('keydown', handleKeyDown, true);
document.addEventListener('fullscreenchange', handleFullscreenChange);
document.addEventListener('contextmenu', suppressBrowserContextMenu);
frame.addEventListener('contextmenu', suppressBrowserContextMenu);
frame.addEventListener('click', handleToolbarClick, true);
frame.addEventListener('keydown', handleToolbarKeyDown, true);
observer.observe(frame, { childList: true, subtree: true });
syncFullscreenButton();
return () => {
document.removeEventListener('keydown', handleKeyDown, true);
document.removeEventListener('fullscreenchange', handleFullscreenChange);
document.removeEventListener('contextmenu', suppressBrowserContextMenu);
frame.removeEventListener('contextmenu', suppressBrowserContextMenu);
frame.removeEventListener('click', handleToolbarClick, true);
frame.removeEventListener('keydown', handleToolbarKeyDown, true);
observer.disconnect();
};
}, []);
const chartOptions = useMemo<AgCartesianChartOptions>(() => {
const isCost = metricKey === 'cost';
const chartData = yearlyCostData.map((datum) => ({
year: datum.year,
amount: datum.cost == null ? null : isCost ? datum.cost : Math.round((datum.cost / Number(datum[metricKey])) * 100) / 100,
}));
return {
theme: {
palette: {
fills: ['#006f9b', '#ff7faa', '#00994d', '#ff8833', '#00a0dd'],
strokes: ['#003f58', '#934962', '#004a25', '#914d1d', '#006288'],
},
params: {
foregroundColor: '#262a33',
backgroundColor: '#fff1e5',
accentColor: '#0d7680',
fontFamily: '"Microsoft YaHei", "PingFang SC", "Segoe UI", Arial, sans-serif',
fontSize: 14,
tooltipBackgroundColor: '#fff7ef',
tooltipTextColor: '#262a33',
},
},
locale: {
localeText: AG_CHARTS_LOCALE_ZH_CN,
},
background: {
fill: 'transparent',
},
padding: {
top: 16,
right: 16,
bottom: 18,
left: 24,
},
data: chartData,
zoom: {
enabled: true,
anchorPointX: 'pointer',
anchorPointY: 'pointer',
buttons: {
enabled: true,
visible: 'hover',
buttons: [
{ icon: 'zoom-out', value: 'zoom-out', section: 'zoom', tooltip: '缩小' },
{ icon: 'zoom-in', value: 'zoom-in', section: 'zoom', tooltip: '放大' },
{ icon: 'pan-left', value: 'pan-left', section: 'pan', tooltip: '左移' },
{ icon: 'pan-right', value: 'pan-right', section: 'pan', tooltip: '右移' },
{ icon: 'reset', value: 'reset', section: 'reset', tooltip: '重置' },
],
},
},
contextMenu: {
enabled: true,
items: ['defaults'],
},
annotations: {
enabled: true,
toolbar: {
buttons: [
{
icon: 'trend-line-drawing',
value: 'line-menu',
tooltip: 'Line Tool',
},
{
icon: 'text-annotation',
value: 'text-menu',
tooltip: 'Text Tool',
},
{
icon: 'arrow-drawing',
value: 'shape-menu',
tooltip: 'Shape Tool',
},
{
icon: 'fibonacci-retracement-drawing',
value: 'fibonacci-menu',
tooltip: 'Fibonacci Tool',
},
{
icon: 'delete',
value: 'clear',
tooltip: 'Clear annotations',
},
],
},
subtitle: {
text: '收入、订单与毛利表现',
},
data: revenueData,
series: [
{
type: chartType,
xKey: 'month',
yKey: 'revenue',
yName: '收入',
fill: '#2563eb',
stroke: '#2563eb',
type: 'line',
xKey: 'year',
yKey: 'amount',
yName: selectedMetric.label,
stroke: '#0078a8',
strokeWidth: 2,
marker: {
enabled: true,
fill: '#0078a8',
stroke: '#0078a8',
size: 5,
},
{
type: chartType,
xKey: 'month',
yKey: 'orders',
yName: '订单',
fill: '#059669',
stroke: '#059669',
interpolation: {
type: 'smooth',
},
{
type: chartType,
xKey: 'month',
yKey: 'margin',
yName: '毛利',
fill: '#d97706',
stroke: '#d97706',
},
],
axes: {
x: {
type: 'category',
position: 'bottom',
line: {
enabled: true,
stroke: '#c8b9a7',
},
tick: {
enabled: false,
},
label: {
color: '#1f2933',
fontSize: 12,
},
crosshair: {
snap: false,
},
},
y: {
type: 'number',
position: 'left',
title: {
text: '数值',
text: '',
},
label: {
color: '#1f2933',
fontSize: 12,
formatter: ({ value }) =>
isCost
? formatWan(Number(value))
: Number(value).toLocaleString('zh-CN', {
minimumFractionDigits: 0,
maximumFractionDigits: 0,
}),
},
line: {
enabled: false,
},
tick: {
enabled: false,
},
gridLine: {
enabled: true,
style: [
{
stroke: '#e5d9ca',
lineDash: [0],
},
],
},
crosshair: {
snap: false,
},
},
},
legend: {
position: 'bottom',
enabled: false,
},
}),
[chartType],
);
tooltip: {
enabled: true,
},
};
}, [metricKey, selectedMetric.label]);
return (
<main className="app-shell">
<section className="toolbar" aria-label="图表设置">
<div>
<h1>AG Chart Service</h1>
<p>React </p>
<main className="dashboard-shell">
<div className="watermark-layer" aria-hidden="true">
{Array.from({ length: 18 }).map((_, index) => (
<span key={index}></span>
))}
</div>
<div className="segmented-control" aria-label="切换图表类型">
<section className="workspace" aria-label="年度费用模板" ref={workspaceRef}>
<section className="chart-area" aria-label="年度总费用图表">
<div className="chart-frame" ref={chartFrameRef}>
<div className="metric-switcher">
<button
className={chartType === 'bar' ? 'active' : ''}
className="metric-switcher-button"
type="button"
onClick={() => setChartType('bar')}
title="切换纵坐标指标"
aria-expanded={metricMenuOpen}
aria-haspopup="menu"
onClick={() => setMetricMenuOpen((open) => !open)}
>
{selectedMetric.label}
</button>
{metricMenuOpen ? (
<div className="metric-switcher-menu" role="menu" aria-label="切换纵坐标指标">
{metricOptions.map((option) => (
<button
className={chartType === 'line' ? 'active' : ''}
className="metric-switcher-menu-item"
type="button"
onClick={() => setChartType('line')}
role="menuitem"
key={option.key}
aria-current={option.key === metricKey}
onClick={() => {
setMetricKey(option.key);
setMetricMenuOpen(false);
}}
>
线
{option.label}
</button>
))}
</div>
) : null}
</div>
<button className="chart-fullscreen-button ag-charts-toolbar__button" type="button" title="全屏(F11)">
<i className="anticon anticon-arrow-salt ag-charts-myButton-fullScreen ag-charts-diy-button" />
</button>
<AgCharts options={chartOptions} />
</div>
</section>
<section className="chart-panel" aria-label="业务趋势图表">
<AgCharts options={chartOptions} />
<aside className="right-placeholder" aria-label="右侧预留区域" />
</section>
</main>
);

View File

@ -1,9 +1,8 @@
:root {
color: #172033;
background: #f4f7fb;
color: #161616;
background: #f5e8d8;
font-family:
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
sans-serif;
"Microsoft YaHei", "PingFang SC", "Segoe UI", Arial, sans-serif;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
@ -15,102 +14,441 @@
}
body {
margin: 0;
min-width: 320px;
min-height: 100vh;
margin: 0;
overflow: hidden;
}
button {
font: inherit;
}
.app-shell {
display: grid;
grid-template-rows: auto minmax(360px, 1fr);
gap: 18px;
width: min(1180px, calc(100vw - 32px));
min-height: 100vh;
margin: 0 auto;
padding: 24px 0;
.wea-right-menu-show {
display: none !important;
}
.toolbar {
.wea-right-menu,
.wea-right-menu-show {
display: none !important;
}
.dashboard-shell {
position: relative;
min-height: 100vh;
background: #f5e8d8;
overflow: hidden;
}
.watermark-layer {
position: absolute;
inset: -30px;
z-index: 0;
display: grid;
grid-template-columns: repeat(4, minmax(260px, 1fr));
grid-auto-rows: 128px;
align-items: center;
pointer-events: none;
color: rgba(150, 140, 128, 0.2);
font-size: 16px;
letter-spacing: 0;
transform: rotate(-18deg);
}
.watermark-layer span {
display: block;
white-space: nowrap;
}
.workspace {
position: relative;
z-index: 1;
display: grid;
grid-template-columns: minmax(540px, 52vw) 1fr;
gap: 28px;
height: 100vh;
padding: 8px 28px 18px 64px;
}
.chart-area {
display: grid;
grid-template-rows: minmax(0, 1fr);
min-width: 0;
}
.chart-title {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
justify-content: center;
gap: 6px;
}
.toolbar h1 {
.chart-title h1 {
margin: 0;
font-size: 28px;
line-height: 1.15;
font-size: 16px;
font-weight: 500;
letter-spacing: 0;
line-height: 1;
}
.toolbar p {
margin: 6px 0 0;
color: #5b6578;
font-size: 14px;
}
.segmented-control {
display: inline-grid;
grid-template-columns: repeat(2, minmax(72px, 1fr));
min-width: 160px;
padding: 4px;
border: 1px solid #cfd7e6;
border-radius: 8px;
background: #ffffff;
}
.segmented-control button {
min-height: 34px;
border: 0;
border-radius: 6px;
color: #4a5568;
background: transparent;
.chart-title button {
display: grid;
width: 18px;
height: 18px;
place-items: center;
padding: 0;
border: 1px solid rgba(95, 88, 80, 0.18);
border-radius: 2px;
color: #6d6258;
background: rgba(255, 249, 241, 0.36);
cursor: pointer;
transition:
background-color 120ms ease,
border-color 120ms ease,
color 120ms ease,
transform 120ms ease,
box-shadow 120ms ease;
}
.segmented-control button.active {
color: #ffffff;
background: #1f4ed8;
.chart-title button:hover {
border-color: rgba(0, 120, 168, 0.36);
color: #0078a8;
background: rgba(255, 252, 248, 0.94);
box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12);
}
.chart-panel {
min-height: 520px;
padding: 16px;
border: 1px solid #d9e1ee;
border-radius: 8px;
background: #ffffff;
.chart-title button:active {
transform: translateY(1px);
}
.chart-panel > div {
.chart-title button:focus-visible {
outline: 2px solid rgba(0, 120, 168, 0.34);
outline-offset: 2px;
}
.chart-title button span {
position: relative;
width: 11px;
height: 11px;
}
.chart-title button span::before {
position: absolute;
top: 5px;
left: 1px;
width: 10px;
height: 1px;
background: currentColor;
transform: rotate(-35deg);
content: "";
}
.chart-title button span::after {
position: absolute;
right: 1px;
bottom: 1px;
width: 4px;
height: 1px;
background: currentColor;
content: "";
}
.chart-frame {
position: relative;
min-width: 0;
min-height: 0;
padding: 26px 0 0;
}
.workspace:fullscreen {
position: relative;
z-index: 10;
display: grid;
grid-template-columns: minmax(540px, 52vw) 1fr;
gap: 28px;
width: 100vw;
height: 100vh;
padding: 8px 28px 18px 64px;
background: #f5e8d8;
}
.workspace:fullscreen .chart-area {
height: calc(100vh - 26px);
}
.workspace:fullscreen .right-placeholder {
display: block;
min-width: 0;
height: 100%;
}
@media (max-width: 640px) {
.app-shell {
width: min(100vw - 20px, 1180px);
grid-template-rows: auto minmax(420px, 1fr);
padding: 16px 0;
.chart-frame > div {
height: 100%;
}
.toolbar {
align-items: stretch;
flex-direction: column;
.chart-frame .ag-charts-wrapper {
--ag-charts-accent-color: #0078a8;
--ag-charts-button-background-color: rgba(255, 249, 241, 0.72);
--ag-charts-button-border-radius: 3px;
--ag-charts-border-color: rgba(90, 82, 72, 0.22);
--ag-charts-chrome-background-color: rgba(255, 249, 241, 0.84);
}
.toolbar h1 {
font-size: 24px;
.chart-frame .ag-charts-toolbar {
gap: 8px;
padding: 0;
background: transparent;
border: 0;
box-shadow: none;
}
.segmented-control {
.chart-frame .ag-charts-annotations__toolbar {
left: -46px;
top: 24px;
overflow: visible !important;
}
.chart-frame .ag-charts-annotations__toolbar .ag-charts-toolbar {
overflow: visible !important;
}
.metric-switcher {
position: absolute;
left: 74px;
top: 272px;
z-index: 12;
}
.metric-switcher-button {
display: block;
width: 22px;
min-height: 112px;
padding: 8px 2px;
border: 1px solid rgba(90, 82, 72, 0.16);
border-radius: 3px;
color: #111827;
background: rgba(255, 241, 229, 0.68);
font-size: 12px;
letter-spacing: 2px;
line-height: 1.25;
text-align: center;
cursor: pointer;
transition:
background-color 120ms ease,
border-color 120ms ease,
color 120ms ease,
box-shadow 120ms ease;
writing-mode: vertical-rl;
text-orientation: upright;
}
.metric-switcher-button:hover,
.metric-switcher-button[aria-expanded="true"] {
color: #0078a8;
border-color: rgba(0, 120, 168, 0.36);
background: rgba(255, 252, 248, 0.94);
box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12);
}
.metric-switcher-menu {
position: absolute;
left: 30px;
top: 8px;
width: max-content;
min-width: 196px;
padding: 4px 0;
border: 1px solid rgba(90, 82, 72, 0.22);
border-radius: 3px;
background: #fbede1;
box-shadow: 0 4px 14px rgba(69, 54, 36, 0.14);
}
.metric-switcher-menu-item {
display: block;
width: 100%;
min-height: 30px;
padding: 0 12px;
border: 0;
color: #262a33;
background: transparent;
font-size: 13px;
line-height: 30px;
text-align: left;
white-space: nowrap;
cursor: pointer;
}
.chart-panel {
min-height: 460px;
padding: 10px;
.metric-switcher-menu-item:hover,
.metric-switcher-menu-item[aria-current="true"] {
color: #0078a8;
background: rgba(255, 252, 248, 0.94);
}
.chart-frame .chart-fullscreen-button {
position: absolute;
left: 24px;
top: 210px;
z-index: 9;
display: grid;
width: 34px;
height: 34px;
min-width: 34px;
min-height: 34px;
place-items: center;
padding: 0;
border: 1px solid rgba(90, 82, 72, 0.22);
border-radius: 3px;
color: #46413b;
background: rgba(255, 249, 241, 0.72);
box-shadow: none;
}
.chart-frame .ag-charts-toolbar__button[title="Clear annotations"] {
transform: translateY(42px);
}
.chart-frame .ag-charts-zoom-buttons {
top: auto !important;
right: 24px !important;
bottom: 34px !important;
left: auto !important;
width: auto !important;
height: auto !important;
z-index: 8;
opacity: 0;
pointer-events: none;
transform: translateY(4px);
transition:
opacity 140ms ease,
transform 140ms ease;
}
.chart-frame:hover .ag-charts-zoom-buttons,
.chart-frame:focus-within .ag-charts-zoom-buttons,
.chart-frame .ag-charts-zoom-buttons:focus-within {
opacity: 1;
pointer-events: auto;
transform: translateY(0);
}
.chart-frame .ag-charts-zoom-buttons .ag-charts-toolbar {
position: relative !important;
z-index: 9;
gap: 0;
padding: 0;
border: 0;
border-radius: 3px;
background: transparent;
box-shadow: none;
}
.chart-frame .ag-charts-toolbar__button {
width: 26px;
height: 26px;
color: #46413b;
border-color: rgba(90, 82, 72, 0.22);
background: rgba(255, 249, 241, 0.72);
cursor: pointer;
}
.chart-frame .ag-charts-zoom-buttons .ag-charts-toolbar__button {
width: 26px;
height: 26px;
min-width: 26px;
min-height: 26px;
padding: 3px;
background: rgba(255, 249, 241, 0.72);
}
.chart-frame .ag-charts-toolbar__button:hover,
.chart-frame .ag-charts-toolbar__button--active {
color: #0078a8;
border-color: rgba(0, 120, 168, 0.36);
background: rgba(255, 252, 248, 0.94);
box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12);
}
.chart-frame .ag-charts-myButton-fullScreen {
position: relative;
display: block;
width: 16px;
height: 16px;
}
.chart-frame .ag-charts-myButton-fullScreen::before,
.chart-frame .ag-charts-myButton-fullScreen::after {
position: absolute;
inset: 0;
display: block;
width: 16px;
height: 16px;
content: "";
}
.chart-frame .anticon-arrow-salt::before {
border-top: 1px solid currentColor;
border-right: 1px solid currentColor;
clip-path: polygon(54% 0, 100% 0, 100% 46%, 86% 46%, 86% 14%, 54% 14%);
}
.chart-frame .anticon-arrow-salt::after {
border-bottom: 1px solid currentColor;
border-left: 1px solid currentColor;
clip-path: polygon(0 54%, 14% 54%, 14% 86%, 46% 86%, 46% 100%, 0 100%);
}
.chart-frame .anticon-shrink::before {
top: 2px;
left: 2px;
width: 6px;
height: 6px;
border-right: 1px solid currentColor;
border-bottom: 1px solid currentColor;
}
.chart-frame .anticon-shrink::after {
right: 2px;
bottom: 2px;
left: auto;
top: auto;
width: 6px;
height: 6px;
border-top: 1px solid currentColor;
border-left: 1px solid currentColor;
}
.chart-frame .ag-charts-toolbar__button:disabled {
cursor: not-allowed;
opacity: 0.38;
}
.chart-frame .ag-charts-toolbar__button[aria-disabled="true"] {
cursor: not-allowed;
opacity: 0.38;
}
.right-placeholder {
min-width: 0;
height: 100%;
}
@media (max-width: 900px) {
body {
overflow: auto;
}
.workspace {
grid-template-columns: 1fr;
height: auto;
min-height: 100vh;
padding: 8px 18px 18px 56px;
}
.chart-area {
min-height: 520px;
}
.right-placeholder {
min-height: 280px;
}
}

1
vite-dev.err.log Normal file
View File

@ -0,0 +1 @@
$ vite --host 0.0.0.0 --port "5173"

38
vite-dev.log Normal file
View File

@ -0,0 +1,38 @@
Port 5173 is in use, trying another one...
VITE v7.3.2 ready in 271 ms
➜ Local: http://localhost:5174/
➜ Network: http://198.18.0.1:5174/
➜ Network: http://100.106.162.120:5174/
➜ Network: http://192.168.1.155:5174/
 ➜ press h + enter to show help
15:45:13 [vite] (client) hmr update /src/App.tsx
15:45:39 [vite] (client) hmr update /src/styles.css
15:59:24 [vite] (client) hmr update /src/App.tsx
15:59:52 [vite] (client) hmr update /src/styles.css
16:00:28 [vite] (client) hmr update /src/styles.css
16:00:58 [vite] (client) hmr update /src/styles.css
16:06:48 [vite] (client) hmr update /src/App.tsx
16:07:28 [vite] (client) hmr update /src/App.tsx
16:07:28 [vite] (client) ✨ new dependencies optimized: ag-charts-enterprise, ag-charts-locale
16:07:28 [vite] (client) ✨ optimized dependencies changed. reloading
16:07:47 [vite] (client) hmr update /src/styles.css
16:08:26 [vite] (client) hmr update /src/styles.css
16:09:28 [vite] (client) hmr update /src/App.tsx
16:11:07 [vite] (client) hmr update /src/App.tsx
16:11:48 [vite] (client) hmr update /src/styles.css
16:13:15 [vite] (client) hmr update /src/styles.css
16:17:34 [vite] (client) hmr update /src/App.tsx
16:18:10 [vite] (client) hmr update /src/styles.css
16:22:30 [vite] (client) hmr update /src/App.tsx
16:23:11 [vite] (client) hmr update /src/styles.css
16:24:37 [vite] (client) hmr update /src/App.tsx
16:25:42 [vite] (client) page reload demo.html
16:25:42 [vite] (client) page reload demo.html
16:27:28 [vite] (client) hmr update /src/App.tsx
16:28:39 [vite] (client) hmr update /src/styles.css
16:32:10 [vite] (client) hmr update /src/App.tsx
16:33:55 [vite] (client) hmr update /src/App.tsx
16:38:49 [vite] (client) hmr update /src/App.tsx
16:39:34 [vite] (client) hmr update /src/styles.css