Compare commits

...

5 Commits

Author SHA1 Message Date
178a3e656f '1' 2026-06-01 14:48:17 +08:00
cfb6afcdce '1' 2026-05-21 09:24:15 +08:00
58abe588aa 1 2026-05-13 16:23:55 +08:00
46325ee801 Merge remote-tracking branch 'origin/main' into building-facility-object 2026-05-13 10:25:08 +08:00
c65235f377 feat: switch to building facility object 2026-05-11 10:30:14 +08:00
16 changed files with 1135 additions and 434 deletions

View File

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

View File

@ -0,0 +1,6 @@
[ 300ms] [INFO] %cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools font-weight:bold @ http://127.0.0.1:5173/node_modules/.vite/deps/react-dom_client.js?v=ae174d51:20102
[ 1230ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://127.0.0.1:5173/favicon.ico:0
[ 40506ms] [ERROR] Failed to load resource: the server responded with a status of 401 () @ https://nest.zwgczx.com/api/v1/zw/getBuildingFunctionCostFilterTree?key=templateLibrary&currenttime=1778660578349&__random__=1778660578349:0
[ 40812ms] [ERROR] Failed to load resource: the server responded with a status of 401 () @ https://nest.zwgczx.com/api/v1/zw/getBuildingFunctionCostFilterTree?key=indicatorTree&templateId=3&currenttime=1778660578682&__random__=1778660578682:0
[ 52231ms] [ERROR] Failed to load resource: the server responded with a status of 401 () @ https://nest.zwgczx.com/api/v1/zw/getBuildingFunctionCostFilterTree?key=templateLibrary&currenttime=1778660590101&__random__=1778660590101:0
[ 53824ms] [ERROR] Failed to load resource: the server responded with a status of 401 () @ https://nest.zwgczx.com/api/v1/zw/getBuildingFunctionCostFilterTree?key=indicatorTree&templateId=3&currenttime=1778660591693&__random__=1778660591693:0

View File

@ -0,0 +1,84 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- region "年度费用模板" [ref=e4]:
- generic "筛选条件" [ref=e5]:
- button "省市区" [ref=e6] [cursor=pointer]:
- img [ref=e7]
- generic [ref=e11]: 省市区
- button "自然地理区位" [ref=e12] [cursor=pointer]:
- img [ref=e13]
- generic [ref=e16]: 自然地理区位
- button "设施类别" [ref=e17] [cursor=pointer]:
- img [ref=e18]
- generic [ref=e22]: 设施类别
- button "建筑功能" [ref=e23] [cursor=pointer]:
- img [ref=e24]
- generic [ref=e27]: 建筑功能
- button "建设阶段" [ref=e28] [cursor=pointer]:
- img [ref=e29]
- generic [ref=e34]: 建设阶段
- button "规划形式" [ref=e35] [cursor=pointer]:
- img [ref=e36]
- generic [ref=e41]: 规划形式
- region "年度总费用图表" [ref=e42]:
- generic [ref=e43]:
- button "纵坐标:造价(元)" [ref=e45] [cursor=pointer]: 造价(元)
- generic [ref=e46]:
- figure "图表共有0个系列":
- generic [ref=e47]:
- img "interactive chart":
- generic:
- img
- img
- region [ref=e48]
- toolbar "标注" [ref=e49]:
- button "库" [ref=e50] [cursor=pointer]:
- generic:
- generic:
- button "树" [ref=e51] [cursor=pointer]:
- generic:
- generic:
- button "均" [ref=e52] [cursor=pointer]:
- generic:
- button "Line Tool" [disabled] [ref=e53]
- button "Text Tool" [disabled] [ref=e54]
- button "Shape Tool" [disabled] [ref=e55]
- button "Fibonacci Tool" [disabled] [ref=e56]
- button "全屏(F11)" [ref=e57] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e58]
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=e59]:
- button "缩小" [disabled] [ref=e60]
- button "放大" [ref=e61] [cursor=pointer]
- button "左移" [disabled] [ref=e62]
- button "右移" [disabled] [ref=e63]
- button "重置" [disabled] [ref=e64]
- complementary "选择内容" [ref=e65]:
- tablist "选择内容切换项" [ref=e66]:
- tab "自然地理区位" [selected] [ref=e67] [cursor=pointer]
- tab "设施类别" [ref=e68] [cursor=pointer]
- tab "建筑功能" [ref=e69] [cursor=pointer]
- tab "建设阶段" [ref=e70] [cursor=pointer]
- tab "规划形式" [ref=e71] [cursor=pointer]
- generic [ref=e72]:
- generic [ref=e73]: 自然地理区位
- generic [ref=e74]: 加载中

View File

@ -0,0 +1,84 @@
- main [ref=e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- region "年度费用模板" [ref=e4]:
- generic "筛选条件" [ref=e5]:
- button "省市区" [ref=e6] [cursor=pointer]:
- img [ref=e7]
- generic [ref=e11]: 省市区
- button "自然地理区位" [ref=e12] [cursor=pointer]:
- img [ref=e13]
- generic [ref=e16]: 自然地理区位
- button "设施类别" [ref=e17] [cursor=pointer]:
- img [ref=e18]
- generic [ref=e22]: 设施类别
- button "建筑功能" [ref=e23] [cursor=pointer]:
- img [ref=e24]
- generic [ref=e27]: 建筑功能
- button "建设阶段" [ref=e28] [cursor=pointer]:
- img [ref=e29]
- generic [ref=e34]: 建设阶段
- button "规划形式" [ref=e35] [cursor=pointer]:
- img [ref=e36]
- generic [ref=e41]: 规划形式
- region "年度总费用图表" [ref=e42]:
- generic [ref=e43]:
- button "纵坐标:造价(元)" [ref=e45] [cursor=pointer]: 造价(元)
- generic [ref=e46]:
- figure "图表共有0个系列":
- generic [ref=e47]:
- img "interactive chart":
- generic:
- img
- img
- region [ref=e48]
- toolbar "标注" [ref=e49]:
- button "库" [ref=e50] [cursor=pointer]:
- generic:
- generic:
- button "树" [ref=e51] [cursor=pointer]:
- generic:
- generic:
- button "均" [ref=e52] [cursor=pointer]:
- generic:
- button "Line Tool" [disabled] [ref=e53]
- button "Text Tool" [disabled] [ref=e54]
- button "Shape Tool" [disabled] [ref=e55]
- button "Fibonacci Tool" [disabled] [ref=e56]
- button "全屏(F11)" [ref=e57] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e58]
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=e59]:
- button "缩小" [disabled] [ref=e60]
- button "放大" [ref=e61] [cursor=pointer]
- button "左移" [disabled] [ref=e62]
- button "右移" [disabled] [ref=e63]
- button "重置" [disabled] [ref=e64]
- complementary "选择内容" [ref=e65]:
- tablist "选择内容切换项" [ref=e66]:
- tab "自然地理区位" [selected] [ref=e67] [cursor=pointer]
- tab "设施类别" [ref=e68] [cursor=pointer]
- tab "建筑功能" [ref=e69] [cursor=pointer]
- tab "建设阶段" [ref=e70] [cursor=pointer]
- tab "规划形式" [ref=e71] [cursor=pointer]
- generic [ref=e72]:
- generic [ref=e73]: 自然地理区位
- generic [ref=e74]: 加载中

View File

@ -1,10 +1,10 @@
# 组团趋势图
# 建筑设施对象趋势图
这是一个基于 `React + AG Charts`组团趋势图页面,用来查看不同分类维度下的年度统计趋势,并通过右侧筛选条件联动图表结果。
这是一个基于 `React + AG Charts`建筑设施对象趋势图页面,用来查看不同分类维度下的年度统计趋势,并通过右侧筛选条件联动图表结果。
## 功能
- 左侧展示组团趋势图,支持最低值、最高值、平均值、中位数和数据量切换
- 左侧展示建筑设施对象趋势图,支持最低值、最高值、平均值、中位数和数据量切换
- 右侧展示分类树,支持按 `自然地理区位 / 设施类别 / 建设阶段 / 规划形式` 选择节点
- 筛选条件支持 `省市区`,后端会根据 `uf_xzqy` 展开到区级 `id` 后再过滤
- 支持搜索筛选树节点,支持多条件叠加

View File

@ -8,6 +8,8 @@
"ag-charts-community": "^13.2.1",
"ag-charts-enterprise": "13.2.1",
"ag-charts-react": "^13.2.1",
"ag-grid-community": "^35.3.0",
"ag-grid-react": "^35.3.0",
"lucide-react": "^1.14.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
@ -202,6 +204,10 @@
"ag-charts-types": ["ag-charts-types@13.2.1", "", {}, "sha512-r7veb3QqJtIKlXmeUsLR4/oDPwmHxFI2tmbZra/203mdaz3uwQUrrgYNg628nrK+7L2YxXnwGc6L05tWjLLjNQ=="],
"ag-grid-community": ["ag-grid-community@35.3.0", "", { "dependencies": { "ag-charts-types": "13.3.0" } }, "sha512-c9WQWB88J965IjBC/GPUX30aAZix10o6oYT86DWipcxgLZTIQlLSilJJEr1bno/245rPEAIMjhoU1gp9VIfURg=="],
"ag-grid-react": ["ag-grid-react@35.3.0", "", { "dependencies": { "ag-grid-community": "35.3.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-3c6YEFGQGNZxEi1PdK0b+WhKkKRJ7KxuYzsG4UmISyax5/J7N93f8B1TZK1pq+AgzPhdk/++vjZe3KhFdF3tog=="],
"baseline-browser-mapping": ["baseline-browser-mapping@2.10.27", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA=="],
"browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="],
@ -232,6 +238,8 @@
"json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="],
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
"lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
"lucide-react": ["lucide-react@1.14.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-+1mdWcfSJVUsaTIjN9zoezmUhfXo5l0vP7ekBMPo3jcS/aIkxHnXqAPsByszMZx/Y8oQBRJxJx5xg+RH3urzxA=="],
@ -242,16 +250,22 @@
"node-releases": ["node-releases@2.0.38", "", {}, "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw=="],
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
"picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="],
"postcss": ["postcss@8.5.14", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg=="],
"prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="],
"react": ["react@19.2.5", "", {}, "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA=="],
"react-dom": ["react-dom@19.2.5", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.5" } }, "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag=="],
"react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
"react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="],
"rollup": ["rollup@4.60.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.3", "@rollup/rollup-android-arm64": "4.60.3", "@rollup/rollup-darwin-arm64": "4.60.3", "@rollup/rollup-darwin-x64": "4.60.3", "@rollup/rollup-freebsd-arm64": "4.60.3", "@rollup/rollup-freebsd-x64": "4.60.3", "@rollup/rollup-linux-arm-gnueabihf": "4.60.3", "@rollup/rollup-linux-arm-musleabihf": "4.60.3", "@rollup/rollup-linux-arm64-gnu": "4.60.3", "@rollup/rollup-linux-arm64-musl": "4.60.3", "@rollup/rollup-linux-loong64-gnu": "4.60.3", "@rollup/rollup-linux-loong64-musl": "4.60.3", "@rollup/rollup-linux-ppc64-gnu": "4.60.3", "@rollup/rollup-linux-ppc64-musl": "4.60.3", "@rollup/rollup-linux-riscv64-gnu": "4.60.3", "@rollup/rollup-linux-riscv64-musl": "4.60.3", "@rollup/rollup-linux-s390x-gnu": "4.60.3", "@rollup/rollup-linux-x64-gnu": "4.60.3", "@rollup/rollup-linux-x64-musl": "4.60.3", "@rollup/rollup-openbsd-x64": "4.60.3", "@rollup/rollup-openharmony-arm64": "4.60.3", "@rollup/rollup-win32-arm64-msvc": "4.60.3", "@rollup/rollup-win32-ia32-msvc": "4.60.3", "@rollup/rollup-win32-x64-gnu": "4.60.3", "@rollup/rollup-win32-x64-msvc": "4.60.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A=="],
@ -271,5 +285,7 @@
"vite": ["vite@7.3.2", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg=="],
"yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
"ag-grid-community/ag-charts-types": ["ag-charts-types@13.3.0", "", {}, "sha512-UMoAn908LC4ZIJSNfUckSBEFa79Mi1vFRA8qIRx+NusEuuFgXDioCZx4MxM7O3rDXlxTWH9DvQmcDjh7vyd89w=="],
}
}

View File

@ -6,7 +6,7 @@
<title>AG Chart Service</title>
</head>
<body>
<div id="zbChart"></div>
<div id="sbChart"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>

View File

@ -13,6 +13,8 @@
"ag-charts-community": "^13.2.1",
"ag-charts-enterprise": "13.2.1",
"ag-charts-react": "^13.2.1",
"ag-grid-community": "^35.3.0",
"ag-grid-react": "^35.3.0",
"lucide-react": "^1.14.0",
"react": "^19.1.0",
"react-dom": "^19.1.0"

File diff suppressed because it is too large Load Diff

View File

@ -8,16 +8,29 @@ ModuleRegistry.registerModules([AllCommunityModule]);
declare global {
interface Window {
__zbChartRoot?: ReturnType<typeof createRoot>;
__chartReactRoots?: WeakMap<Element, ReturnType<typeof createRoot>>;
}
}
const chartContainerId = 'sbChart';
const getRootRegistry = () => {
window.__chartReactRoots ??= new WeakMap<Element, ReturnType<typeof createRoot>>();
return window.__chartReactRoots;
};
const mount = () => {
const container = document.getElementById('zbChart');
const container = document.getElementById(chartContainerId);
if (!container) return false;
window.__zbChartRoot ??= createRoot(container);
window.__zbChartRoot.render(
const roots = getRootRegistry();
let root = roots.get(container);
if (!root) {
root = createRoot(container);
roots.set(container, root);
}
root.render(
<StrictMode>
<App />
</StrictMode>,
@ -32,7 +45,7 @@ if (!mount()) {
if (mount() || retryCount >= 40) {
window.clearInterval(timer);
if (retryCount >= 40) {
console.warn('zbChart container was not found.');
console.warn(`${chartContainerId} container was not found.`);
}
}
}, 50);

View File

@ -69,10 +69,18 @@ button {
gap: 12px 28px;
height: 100vh;
padding: 30px 28px 18px 64px;
transition: grid-template-columns 160ms ease, gap 160ms ease;
}
.workspace.is-right-panel-collapsed {
grid-template-columns: minmax(0, 1fr) 34px;
gap: 12px 12px;
}
.chart-area {
display: grid;
grid-column: 1;
grid-row: 2;
grid-template-rows: minmax(0, 1fr);
min-width: 0;
}
@ -251,6 +259,11 @@ button {
background: #f5e8d8;
}
.workspace:fullscreen.is-right-panel-collapsed {
grid-template-columns: minmax(0, 1fr) 34px;
gap: 12px 12px;
}
.workspace:fullscreen .chart-area {
min-height: 0;
}
@ -361,12 +374,20 @@ button {
.chart-frame .chart-template-button,
.chart-frame .chart-indicator-button,
.chart-frame .chart-statistic-button {
.chart-frame .chart-statistic-button,
.chart-frame .chart-pivot-button,
.chart-frame .chart-fullscreen-button {
color: #46413b;
cursor: pointer !important;
opacity: 1 !important;
overflow: visible !important;
pointer-events: auto !important;
}
.chart-frame .ag-charts-myButton-template,
.chart-frame .ag-charts-myButton-indicator {
.chart-frame .ag-charts-myButton-indicator,
.chart-frame .ag-charts-myButton-pivot {
position: relative;
display: block;
min-width: 16px;
height: 16px;
@ -376,20 +397,146 @@ button {
text-align: center;
}
.chart-indicator-selection-label {
position: absolute;
left: 28px;
top: 6px;
z-index: 3;
max-width: min(560px, calc(100vw - 56px));
padding: 0;
border: 0;
border-radius: 0;
color: #0078a8;
background: transparent;
box-shadow: none;
font-size: 15px;
font-weight: 600;
line-height: 20px;
overflow: hidden;
pointer-events: none;
text-overflow: ellipsis;
white-space: nowrap;
}
.workspace:fullscreen .chart-indicator-selection-label {
left: 28px;
top: 6px;
}
.chart-frame .chart-template-button[aria-expanded="true"],
.chart-frame .chart-indicator-button[aria-expanded="true"],
.chart-frame .chart-statistic-button[aria-expanded="true"] {
.chart-frame .chart-statistic-button[aria-expanded="true"],
.chart-frame .chart-pivot-button.ag-charts-toolbar__button--active,
.chart-frame .chart-fullscreen-button.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-pivot-grid-panel {
position: absolute;
inset: 16px 0 0;
z-index: 10;
min-width: 0;
min-height: 0;
padding: 12px 16px 16px 74px;
border: 1px solid rgba(90, 82, 72, 0.22);
border-radius: 3px;
background: rgba(255, 249, 241, 0.96);
box-shadow: 0 6px 18px rgba(69, 54, 36, 0.08);
}
.chart-pivot-grid-panel .ag-root-wrapper {
border-color: rgba(90, 82, 72, 0.18);
border-radius: 3px;
}
.chart-grid-tool-button {
position: absolute;
left: 24px;
z-index: 12;
width: 26px;
height: 26px;
min-width: 26px;
min-height: 26px;
padding: 0;
border: 1px solid rgba(90, 82, 72, 0.22);
border-radius: 3px;
color: #46413b;
background: rgba(255, 249, 241, 0.72);
font-size: 14px;
font-weight: 600;
line-height: 24px;
text-align: center;
cursor: pointer;
}
.chart-grid-tool-button--template {
top: 12px;
}
.chart-grid-tool-button--indicator {
top: 46px;
}
.chart-grid-tool-button--trend {
top: 80px;
}
.chart-grid-tool-button--fullscreen {
top: 114px;
}
.chart-grid-tool-button:hover {
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-pivot-grid-panel.ag-theme-quartz {
--ag-active-color: #0078a8;
--ag-background-color: #fffaf4;
--ag-border-color: rgba(90, 82, 72, 0.18);
--ag-cell-horizontal-padding: 6px;
--ag-font-family: "Microsoft YaHei", "PingFang SC", "Segoe UI", Arial, sans-serif;
--ag-font-size: 12px;
--ag-foreground-color: #262a33;
--ag-header-cell-horizontal-padding: 6px;
--ag-header-background-color: #f6eadc;
--ag-row-hover-color: rgba(0, 120, 168, 0.08);
}
.chart-pivot-grid-panel .ag-header-cell,
.chart-pivot-grid-panel .ag-header-group-cell {
padding-left: 6px;
padding-right: 6px;
}
.chart-pivot-grid-panel .ag-cell {
padding-left: 6px;
padding-right: 6px;
}
.chart-pivot-grid-panel .ag-header-cell-label,
.chart-pivot-grid-panel .ag-header-group-cell-label {
justify-content: center;
}
.metric-switcher {
position: absolute;
z-index: 12;
}
.metric-switcher--chart {
left: 74px;
top: 272px;
z-index: 12;
}
.metric-switcher--grid {
left: 24px;
top: 148px;
}
.metric-switcher-button {
@ -415,6 +562,23 @@ button {
text-orientation: upright;
}
.metric-switcher-button--grid {
width: 26px;
height: 26px;
min-width: 26px;
min-height: 26px;
padding: 0;
border-color: rgba(90, 82, 72, 0.22);
color: #46413b;
background: rgba(255, 249, 241, 0.72);
font-size: 14px;
font-weight: 600;
letter-spacing: 0;
line-height: 24px;
writing-mode: horizontal-tb;
text-orientation: mixed;
}
.metric-switcher-button:hover,
.metric-switcher-button[aria-expanded="true"] {
color: #0078a8;
@ -532,15 +696,19 @@ button {
box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12);
}
.chart-frame .ag-charts-myButton-fullScreen {
.chart-frame .ag-charts-myButton-fullScreen,
.chart-grid-tool-button .ag-charts-myButton-fullScreen {
position: relative;
display: block;
width: 16px;
height: 16px;
margin: 4px auto;
}
.chart-frame .ag-charts-myButton-fullScreen::before,
.chart-frame .ag-charts-myButton-fullScreen::after {
.chart-frame .ag-charts-myButton-fullScreen::after,
.chart-grid-tool-button .ag-charts-myButton-fullScreen::before,
.chart-grid-tool-button .ag-charts-myButton-fullScreen::after {
position: absolute;
inset: 0;
display: block;
@ -549,19 +717,22 @@ button {
content: "";
}
.chart-frame .anticon-arrow-salt::before {
.chart-frame .anticon-arrow-salt::before,
.chart-grid-tool-button .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 {
.chart-frame .anticon-arrow-salt::after,
.chart-grid-tool-button .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 {
.chart-frame .anticon-shrink::before,
.chart-grid-tool-button .anticon-shrink::before {
top: 2px;
left: 2px;
width: 6px;
@ -570,7 +741,8 @@ button {
border-bottom: 1px solid currentColor;
}
.chart-frame .anticon-shrink::after {
.chart-frame .anticon-shrink::after,
.chart-grid-tool-button .anticon-shrink::after {
right: 2px;
bottom: 2px;
left: auto;
@ -593,6 +765,8 @@ button {
.right-panel {
display: grid;
grid-column: 2;
grid-row: 2;
grid-template-rows: auto minmax(0, 1fr);
min-width: 0;
height: 100%;
@ -601,6 +775,52 @@ button {
overflow: hidden;
}
.right-panel-toggle {
display: inline-grid;
grid-column: 2;
grid-row: 2;
justify-self: end;
align-self: start;
width: 28px;
height: 28px;
place-items: center;
padding: 0;
border: 1px solid rgba(90, 82, 72, 0.18);
border-radius: 3px;
color: #46413b;
background: rgba(255, 249, 241, 0.82);
cursor: pointer;
z-index: 4;
}
.right-panel-toggle:hover,
.right-panel-toggle:focus-visible {
color: #0078a8;
border-color: rgba(0, 120, 168, 0.36);
background: rgba(255, 252, 248, 0.96);
box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12);
}
.right-panel-toggle:focus-visible {
outline: 2px solid rgba(0, 120, 168, 0.28);
outline-offset: 2px;
}
.right-panel-toggle-icon {
display: block;
width: 16px;
height: 16px;
}
.workspace.is-right-panel-collapsed .right-panel {
display: none;
}
.workspace.is-right-panel-collapsed .right-panel-toggle {
position: sticky;
top: 24px;
}
.content-tabs {
display: flex;
align-items: center;
@ -971,14 +1191,27 @@ button {
padding: 8px 18px 18px 56px;
}
.workspace.is-right-panel-collapsed {
grid-template-columns: 1fr;
}
.chart-area {
grid-row: 2;
min-height: 520px;
}
.right-panel {
grid-column: 1;
grid-row: 3;
min-height: 280px;
}
.right-panel-toggle {
grid-column: 1;
grid-row: 3;
justify-self: end;
}
.content-tabs {
flex-wrap: wrap;
}

View File

@ -1 +1 @@
$ vite --host 0.0.0.0 --port "5173"
$ vite --host 0.0.0.0 --port "5174"

View File

@ -1,237 +1,8 @@
Port 5173 is in use, trying another one...
VITE v7.3.2 ready in 271 ms
VITE v7.3.2 ready in 306 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/
➜ Network: http://172.31.112.1: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
16:46:57 [vite] (client) hmr update /src/App.tsx
16:47:20 [vite] (client) hmr update /src/App.tsx
16:53:41 [vite] (client) hmr update /src/App.tsx
16:54:18 [vite] (client) hmr update /src/styles.css
16:59:35 [vite] (client) hmr update /src/styles.css
17:01:23 [vite] (client) hmr update /src/styles.css
17:03:24 [vite] (client) hmr update /src/styles.css
17:06:50 [vite] (client) hmr update /src/styles.css
17:29:44 [vite] (client) hmr update /src/App.tsx
17:29:52 [vite] (client) hmr update /src/styles.css
17:32:17 [vite] (client) hmr update /src/App.tsx
17:32:43 [vite] (client) hmr update /src/styles.css
17:34:33 [vite] (client) hmr update /src/App.tsx
17:40:09 [vite] (client) hmr update /src/styles.css
17:40:37 [vite] (client) hmr update /src/App.tsx
17:41:32 [vite] (client) hmr update /src/styles.css
17:42:39 [vite] (client) hmr update /src/styles.css
17:44:42 [vite] (client) hmr update /src/App.tsx
09:11:33 [vite] (client) hmr update /src/App.tsx
09:11:59 [vite] (client) hmr update /src/styles.css
09:14:42 [vite] (client) hmr update /src/styles.css
09:15:32 [vite] (client) hmr update /src/styles.css
09:18:16 [vite] (client) hmr update /src/App.tsx
09:18:28 [vite] (client) hmr update /src/styles.css
09:35:28 [vite] (client) hmr update /src/App.tsx
09:35:53 [vite] (client) hmr update /src/App.tsx
09:35:53 [vite] (client) hmr update /src/styles.css
09:36:43 [vite] (client) hmr update /src/App.tsx
09:40:50 [vite] (client) hmr update /src/App.tsx
09:41:06 [vite] (client) hmr update /src/styles.css
09:42:18 [vite] (client) hmr update /src/styles.css
09:55:02 [vite] (client) hmr update /src/App.tsx
09:55:36 [vite] (client) hmr update /src/App.tsx
09:55:49 [vite] (client) hmr update /src/styles.css
10:07:23 [vite] (client) hmr update /src/App.tsx
10:26:33 [vite] (client) hmr update /src/App.tsx
10:27:25 [vite] (client) hmr update /src/App.tsx
10:27:56 [vite] (client) hmr update /src/styles.css
11:14:09 [vite] (client) hmr update /src/App.tsx
11:16:09 [vite] (client) page reload zbChart/index.html
11:17:29 [vite] (client) page reload index.html
11:17:43 [vite] (client) page reload src/main.tsx
11:32:17 [vite] (client) page reload src/main.tsx
11:35:33 [vite] (client) hmr update /src/App.tsx
11:35:45 [vite] (client) hmr update /src/styles.css
11:49:29 [vite] (client) hmr update /src/App.tsx
11:52:03 [vite] (client) hmr update /src/styles.css
11:53:37 [vite] (client) hmr update /src/App.tsx
11:57:22 [vite] (client) hmr update /src/App.tsx
11:59:02 [vite] (client) hmr update /src/App.tsx
15:00:25 [vite] (client) hmr update /src/App.tsx
15:14:46 [vite] (client) hmr update /src/App.tsx
15:14:56 [vite] (client) hmr update /src/App.tsx
15:15:05 [vite] (client) hmr update /src/App.tsx
15:15:18 [vite] (client) hmr update /src/App.tsx
15:15:29 [vite] (client) hmr update /src/App.tsx
15:15:39 [vite] (client) hmr update /src/App.tsx
15:15:49 [vite] (client) hmr update /src/styles.css
15:54:06 [vite] (client) hmr update /src/App.tsx
15:54:29 [vite] (client) hmr update /src/styles.css
16:29:28 [vite] (client) hmr update /src/App.tsx
16:29:37 [vite] (client) hmr update /src/App.tsx
17:53:09 [vite] (client) hmr update /src/App.tsx
17:53:24 [vite] (client) hmr update /src/styles.css
17:54:53 [vite] (client) hmr update /src/App.tsx
17:55:03 [vite] (client) hmr update /src/styles.css
18:10:22 [vite] (client) hmr update /src/App.tsx
09:43:29 [vite] (client) page reload zbChart/index.html
09:43:43 [vite] (client) page reload demo.html
09:44:24 [vite] (client) hmr update /src/App.tsx
09:47:32 [vite] (client) hmr update /src/App.tsx
09:56:50 [vite] (client) hmr update /src/App.tsx
10:03:05 [vite] (client) hmr update /src/App.tsx
10:04:28 [vite] (client) hmr update /src/App.tsx
10:04:35 [vite] (client) hmr update /src/styles.css
10:06:06 [vite] (client) hmr update /src/App.tsx
10:06:25 [vite] (client) hmr update /src/styles.css
14:21:06 [vite] (client) hmr update /src/App.tsx
14:26:18 [vite] (client) hmr update /src/App.tsx
14:26:51 [vite] (client) hmr update /src/styles.css
14:28:15 [vite] (client) hmr update /src/App.tsx
14:28:24 [vite] (client) hmr update /src/App.tsx
15:07:03 [vite] (client) hmr update /src/App.tsx
15:07:31 [vite] (client) hmr update /src/App.tsx
15:08:11 [vite] (client) hmr update /src/App.tsx
15:13:59 [vite] (client) hmr update /src/App.tsx
16:47:31 [vite] (client) hmr update /src/App.tsx
16:48:22 [vite] (client) hmr update /src/App.tsx
16:48:32 [vite] (client) hmr update /src/App.tsx
17:00:07 [vite] (client) hmr update /src/App.tsx
17:15:44 [vite] (client) hmr update /src/App.tsx
18:06:45 [vite] (client) hmr update /src/App.tsx
18:07:01 [vite] (client) hmr update /src/App.tsx
18:07:22 [vite] (client) hmr update /src/App.tsx
18:07:43 [vite] (client) hmr update /src/App.tsx
18:08:03 [vite] (client) hmr update /src/App.tsx
18:08:20 [vite] (client) hmr update /src/App.tsx
18:08:55 [vite] (client) hmr update /src/App.tsx
18:09:09 [vite] (client) hmr update /src/App.tsx
18:09:41 [vite] (client) hmr update /src/App.tsx
18:10:20 [vite] (client) hmr update /src/styles.css
18:11:00 [vite] (client) hmr update /src/styles.css
09:08:22 [vite] (client) hmr update /src/App.tsx
09:09:58 [vite] (client) hmr update /src/App.tsx
09:10:10 [vite] (client) hmr update /src/styles.css
09:12:48 [vite] (client) hmr update /src/styles.css
09:24:09 [vite] (client) hmr update /src/styles.css
09:24:54 [vite] (client) hmr update /src/styles.css
09:25:33 [vite] (client) hmr update /src/App.tsx
09:25:55 [vite] (client) hmr update /src/styles.css
09:31:55 [vite] (client) hmr update /src/App.tsx
09:32:05 [vite] (client) hmr update /src/App.tsx
09:32:12 [vite] (client) hmr update /src/App.tsx
09:32:32 [vite] (client) hmr update /src/styles.css
09:45:56 [vite] (client) hmr update /src/App.tsx
10:00:51 [vite] (client) hmr update /src/App.tsx
10:01:08 [vite] (client) hmr update /src/App.tsx
10:01:23 [vite] (client) hmr update /src/App.tsx
10:01:36 [vite] (client) hmr update /src/App.tsx
10:01:46 [vite] (client) hmr update /src/App.tsx
10:01:56 [vite] (client) hmr update /src/App.tsx
10:02:58 [vite] (client) hmr update /src/App.tsx
10:08:33 [vite] (client) hmr update /src/App.tsx
10:08:56 [vite] (client) hmr update /src/App.tsx
10:09:20 [vite] (client) hmr update /src/styles.css
10:09:29 [vite] (client) hmr update /src/styles.css
10:12:15 [vite] (client) hmr update /src/styles.css
10:17:02 [vite] (client) hmr update /src/App.tsx
10:54:20 [vite] (client) hmr update /src/App.tsx
10:54:44 [vite] (client) hmr update /src/App.tsx
10:59:54 [vite] (client) hmr update /src/App.tsx
11:00:16 [vite] (client) hmr update /src/App.tsx
11:00:32 [vite] (client) hmr update /src/App.tsx
11:00:55 [vite] (client) hmr update /src/App.tsx
11:12:15 [vite] (client) hmr update /src/App.tsx
11:16:52 [vite] (client) hmr update /src/App.tsx
11:20:34 [vite] (client) hmr update /src/App.tsx
11:22:39 [vite] (client) hmr update /src/App.tsx
11:30:32 [vite] (client) hmr update /src/App.tsx
11:42:14 [vite] (client) hmr update /src/App.tsx
11:48:40 [vite] (client) hmr update /src/App.tsx
12:07:11 [vite] (client) hmr update /src/App.tsx
12:07:25 [vite] (client) hmr update /src/App.tsx
12:07:50 [vite] (client) hmr update /src/App.tsx
14:44:40 [vite] (client) hmr update /src/App.tsx
14:47:46 [vite] (client) hmr update /src/App.tsx
14:48:15 [vite] (client) hmr update /src/App.tsx
14:51:05 [vite] (client) hmr update /src/App.tsx
15:13:54 [vite] (client) hmr update /src/App.tsx
15:14:22 [vite] (client) hmr update /src/App.tsx
15:17:54 [vite] (client) hmr update /src/App.tsx
15:18:05 [vite] (client) hmr update /src/App.tsx
15:18:58 [vite] (client) hmr update /src/App.tsx
15:37:07 [vite] (client) hmr update /src/App.tsx
15:37:17 [vite] (client) hmr update /src/App.tsx
15:44:06 [vite] (client) hmr update /src/App.tsx
16:32:19 [vite] (client) hmr update /src/App.tsx
17:15:32 [vite] (client) hmr update /src/App.tsx
15:34:28 [vite] (client) hmr update /src/App.tsx
11:18:46 [vite] (client) hmr update /src/App.tsx
11:18:59 [vite] (client) hmr update /src/App.tsx
11:19:51 [vite] (client) hmr update /src/App.tsx
11:20:06 [vite] (client) hmr update /src/App.tsx
11:20:27 [vite] (client) hmr update /src/App.tsx
11:20:45 [vite] (client) hmr update /src/App.tsx
11:21:04 [vite] (client) hmr update /src/App.tsx
11:21:48 [vite] (client) hmr update /src/App.tsx
11:25:16 [vite] (client) hmr update /src/App.tsx
11:25:34 [vite] (client) hmr update /src/App.tsx
11:33:37 [vite] (client) hmr update /src/styles.css
11:38:01 [vite] (client) hmr update /src/App.tsx
11:38:14 [vite] (client) hmr update /src/App.tsx
11:38:28 [vite] (client) hmr update /src/App.tsx
11:38:42 [vite] (client) hmr update /src/styles.css
11:39:18 [vite] (client) hmr update /src/App.tsx
11:41:08 [vite] (client) hmr update /src/App.tsx
11:48:17 [vite] (client) hmr update /src/App.tsx
11:50:43 [vite] (client) hmr update /src/styles.css
12:07:07 [vite] (client) hmr update /src/App.tsx
12:07:24 [vite] (client) hmr update /src/App.tsx
12:07:45 [vite] (client) hmr update /src/App.tsx
12:08:39 [vite] (client) hmr update /src/App.tsx
12:08:54 [vite] (client) hmr update /src/App.tsx
12:09:23 [vite] (client) hmr update /src/App.tsx
12:09:54 [vite] (client) hmr update /src/App.tsx
12:10:36 [vite] (client) hmr update /src/App.tsx
12:11:14 [vite] (client) hmr update /src/App.tsx
12:12:29 [vite] (client) hmr update /src/App.tsx
12:13:01 [vite] (client) hmr update /src/App.tsx
12:14:05 [vite] (client) hmr update /src/styles.css
12:18:36 [vite] (client) hmr update /src/App.tsx
12:19:03 [vite] (client) hmr update /src/App.tsx
12:22:51 [vite] (client) hmr update /src/App.tsx
12:44:18 [vite] (client) hmr update /src/App.tsx
12:45:27 [vite] (client) hmr update /src/App.tsx
14:35:53 [vite] (client) hmr update /src/App.tsx
15:23:18 [vite] (client) hmr update /src/App.tsx
15:23:36 [vite] (client) hmr update /src/App.tsx
15:41:18 [vite] (client) hmr update /src/App.tsx

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

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

6
vite-test.out.log Normal file
View File

@ -0,0 +1,6 @@
VITE v7.3.2 ready in 307 ms
➜ Local: http://127.0.0.1:5173/
 ➜ press h + enter to show help
16:10:18 [vite] (client) hmr update /src/App.tsx

View File

@ -2,7 +2,19 @@ import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
plugins: [
react(),
{
name: 'weaver-script-scope-wrapper',
renderChunk(code, chunk) {
if (!chunk.isEntry) return null;
return {
code: `;(() => {\n${code}\n})();\n`,
map: null,
};
},
},
],
server: {
port: 5173,
},