This commit is contained in:
wintsa 2026-08-16 17:06:45 +08:00
parent 3a82078bd2
commit 42a07e2bf8
14 changed files with 850 additions and 17 deletions

View File

@ -0,0 +1,2 @@
[ 344ms] [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=9a31a45b:20102
[ 72434ms] [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=9a31a45b:20102

View File

@ -0,0 +1 @@
[ 167ms] [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=9a31a45b:20102

View File

@ -0,0 +1,69 @@
- 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]
- button "自然地理区位" [ref=e12] [cursor=pointer]
- button "设施类别" [ref=e17] [cursor=pointer]
- button "建筑功能" [ref=e23] [cursor=pointer]
- button "建筑性质" [ref=e28] [cursor=pointer]
- button "建设阶段" [ref=e33] [cursor=pointer]
- button "规划形式" [ref=e40] [cursor=pointer]
- button "时间" [ref=e47] [cursor=pointer]
- button "面积" [ref=e51] [cursor=pointer]
- region "年度总费用图表" [ref=e59]:
- generic [ref=e60]:
- button "纵坐标:造价(元)" [ref=e62] [cursor=pointer]: 造价(元)
- generic [ref=e63]:
- figure "图表共有0个系列":
- generic [ref=e64]:
- img "interactive chart"
- region [ref=e65]
- toolbar "标注" [ref=e66]:
- button "库" [ref=e67] [cursor=pointer]
- button "指" [ref=e68] [cursor=pointer]
- button "均" [ref=e69] [cursor=pointer]
- button "Line Tool" [disabled] [ref=e70]
- button "Text Tool" [disabled] [ref=e71]
- button "Shape Tool" [disabled] [ref=e72]
- button "Fibonacci Tool" [disabled] [ref=e73]
- button "全屏(F11)" [ref=e74] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e75]
- button "切换到表格" [ref=e76] [cursor=pointer]:
- generic:
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=e77]:
- button "缩小" [disabled] [ref=e78]
- button "放大" [ref=e79] [cursor=pointer]
- button "左移" [disabled] [ref=e80]
- button "右移" [disabled] [ref=e81]
- button "重置" [disabled] [ref=e82]
- button "收起选择区" [expanded] [ref=e83] [cursor=pointer]
- complementary "选择内容" [ref=e87]:
- tablist "选择内容切换项" [ref=e88]:
- tab "自然地理区位" [selected] [ref=e89] [cursor=pointer]
- tab "设施类别" [ref=e90] [cursor=pointer]
- tab "建设阶段" [ref=e91] [cursor=pointer]
- tab "规划形式" [ref=e92] [cursor=pointer]
- generic [ref=e93]:
- generic [ref=e94]: 自然地理区位
- generic [ref=e95]: 加载中

View File

@ -0,0 +1,70 @@
- main [ref=f1e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- region "年度费用模板" [ref=f1e4]:
- generic "筛选条件" [ref=f1e5]:
- button "省市区" [ref=f1e6] [cursor=pointer]
- button "自然地理区位" [ref=f1e12] [cursor=pointer]
- button "设施类别" [ref=f1e17] [cursor=pointer]
- button "建筑功能" [ref=f1e23] [cursor=pointer]
- button "建筑性质" [ref=f1e28] [cursor=pointer]
- button "建设阶段" [ref=f1e33] [cursor=pointer]
- button "规划形式" [ref=f1e40] [cursor=pointer]
- button "时间" [ref=f1e47] [cursor=pointer]
- button "面积" [ref=f1e51] [cursor=pointer]
- region "年度总费用图表" [ref=f1e59]:
- generic [ref=f1e60]:
- button "纵坐标:造价(元)" [ref=f1e62] [cursor=pointer]: 造价(元)
- generic [ref=f1e63]:
- figure "图表共有0个系列":
- generic [ref=f1e64]:
- img "interactive chart"
- region [ref=f1e65]
- toolbar "标注" [ref=f1e66]:
- button "库" [ref=f1e67] [cursor=pointer]
- button "指" [ref=f1e68] [cursor=pointer]
- button "均" [ref=f1e69] [cursor=pointer]
- button "Line Tool" [disabled] [ref=f1e70]
- button "Text Tool" [disabled] [ref=f1e71]
- button "Shape Tool" [disabled] [ref=f1e72]
- button "Fibonacci Tool" [disabled] [ref=f1e73]
- button "全屏(F11)" [ref=f1e74] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=f1e75]
- button "切换到表格" [ref=f1e76] [cursor=pointer]:
- generic:
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=f1e77]:
- button "缩小" [disabled] [ref=f1e78]
- button "放大" [ref=f1e79] [cursor=pointer]
- button "左移" [disabled] [ref=f1e80]
- button "右移" [disabled] [ref=f1e81]
- button "重置" [disabled] [ref=f1e82]
- button "收起选择区" [expanded] [ref=f1e83] [cursor=pointer]
- complementary "选择内容" [ref=f1e87]:
- tablist "选择内容切换项" [ref=f1e88]:
- tab "自然地理区位" [selected] [ref=f1e89] [cursor=pointer]
- tab "设施类别" [ref=f1e90] [cursor=pointer]
- tab "建筑功能" [ref=f1e91] [cursor=pointer]
- tab "建设阶段" [ref=f1e92] [cursor=pointer]
- tab "规划形式" [ref=f1e93] [cursor=pointer]
- generic [ref=f1e94]:
- generic [ref=f1e95]: 自然地理区位
- generic [ref=f1e96]: 加载中

View File

@ -0,0 +1,87 @@
- main [ref=f1e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- region "年度费用模板" [ref=f1e4]:
- generic "筛选条件" [ref=f1e5]:
- button "省市区" [ref=f1e6] [cursor=pointer]
- button "自然地理区位" [ref=f1e12] [cursor=pointer]
- button "设施类别" [ref=f1e17] [cursor=pointer]
- button "建筑功能" [ref=f1e23] [cursor=pointer]
- button "建筑性质" [active] [ref=f1e28] [cursor=pointer]
- button "建设阶段" [ref=f1e33] [cursor=pointer]
- button "规划形式" [ref=f1e40] [cursor=pointer]
- button "时间" [ref=f1e47] [cursor=pointer]
- button "面积" [ref=f1e51] [cursor=pointer]
- region "年度总费用图表" [ref=f1e59]:
- generic [ref=f1e60]:
- button "纵坐标:造价(元)" [ref=f1e62] [cursor=pointer]: 造价(元)
- generic [ref=f1e63]:
- figure "图表共有0个系列":
- generic [ref=f1e64]:
- img "interactive chart"
- region [ref=f1e65]
- toolbar "标注" [ref=f1e66]:
- button "库" [ref=f1e67] [cursor=pointer]
- button "指" [ref=f1e68] [cursor=pointer]
- button "均" [ref=f1e69] [cursor=pointer]
- button "Line Tool" [disabled] [ref=f1e70]
- button "Text Tool" [disabled] [ref=f1e71]
- button "Shape Tool" [disabled] [ref=f1e72]
- button "Fibonacci Tool" [disabled] [ref=f1e73]
- button "全屏(F11)" [ref=f1e74] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=f1e75]
- button "切换到表格" [ref=f1e76] [cursor=pointer]:
- generic:
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=f1e77]:
- button "缩小" [disabled] [ref=f1e78]
- button "放大" [ref=f1e79] [cursor=pointer]
- button "左移" [disabled] [ref=f1e80]
- button "右移" [disabled] [ref=f1e81]
- button "重置" [disabled] [ref=f1e82]
- button "收起选择区" [expanded] [ref=f1e83] [cursor=pointer]
- complementary "选择内容" [ref=f1e87]:
- tablist "选择内容切换项" [ref=f1e88]:
- tab "自然地理区位" [selected] [ref=f1e89] [cursor=pointer]
- tab "设施类别" [ref=f1e90] [cursor=pointer]
- tab "建筑功能" [ref=f1e91] [cursor=pointer]
- tab "建设阶段" [ref=f1e92] [cursor=pointer]
- tab "规划形式" [ref=f1e93] [cursor=pointer]
- generic [ref=f1e94]:
- generic [ref=f1e95]: 自然地理区位
- generic [ref=f1e96]: 接口待接入
- dialog "建筑性质筛选" [ref=f1e97]:
- generic [ref=f1e98]:
- heading "建筑性质" [level=2] [ref=f1e99]
- button "关闭" [ref=f1e100] [cursor=pointer]: ×
- searchbox "搜索" [ref=f1e102]
- generic [ref=f1e103]: 未选择
- tree [ref=f1e105]:
- treeitem [ref=f1e106]:
- button "公共建筑" [ref=f1e109] [cursor=pointer]
- treeitem [ref=f1e112]:
- button "民用建筑" [ref=f1e115] [cursor=pointer]
- treeitem [ref=f1e118]:
- button "工业建筑" [ref=f1e121] [cursor=pointer]
- generic [ref=f1e124]:
- button "清空当前" [ref=f1e125] [cursor=pointer]
- button "取消" [ref=f1e126] [cursor=pointer]
- button "确认" [ref=f1e127] [cursor=pointer]

View File

@ -0,0 +1,87 @@
- main [ref=f1e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- region "年度费用模板" [ref=f1e4]:
- generic "筛选条件" [ref=f1e5]:
- button "省市区" [ref=f1e6] [cursor=pointer]
- button "自然地理区位" [ref=f1e12] [cursor=pointer]
- button "设施类别" [ref=f1e17] [cursor=pointer]
- button "建筑功能" [ref=f1e23] [cursor=pointer]
- button "建筑性质" [ref=f1e28] [cursor=pointer]
- button "建设阶段" [ref=f1e33] [cursor=pointer]
- button "规划形式" [ref=f1e40] [cursor=pointer]
- button "时间" [ref=f1e47] [cursor=pointer]
- button "面积" [ref=f1e51] [cursor=pointer]
- region "年度总费用图表" [ref=f1e59]:
- generic [ref=f1e60]:
- button "纵坐标:造价(元)" [ref=f1e62] [cursor=pointer]: 造价(元)
- generic [ref=f1e63]:
- figure "图表共有0个系列":
- generic [ref=f1e64]:
- img "interactive chart"
- region [ref=f1e65]
- toolbar "标注" [ref=f1e66]:
- button "库" [ref=f1e67] [cursor=pointer]
- button "指" [ref=f1e68] [cursor=pointer]
- button "均" [ref=f1e69] [cursor=pointer]
- button "Line Tool" [disabled] [ref=f1e70]
- button "Text Tool" [disabled] [ref=f1e71]
- button "Shape Tool" [disabled] [ref=f1e72]
- button "Fibonacci Tool" [disabled] [ref=f1e73]
- button "全屏(F11)" [ref=f1e74] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=f1e75]
- button "切换到表格" [ref=f1e76] [cursor=pointer]:
- generic:
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=f1e77]:
- button "缩小" [disabled] [ref=f1e78]
- button "放大" [ref=f1e79] [cursor=pointer]
- button "左移" [disabled] [ref=f1e80]
- button "右移" [disabled] [ref=f1e81]
- button "重置" [disabled] [ref=f1e82]
- button "收起选择区" [expanded] [ref=f1e83] [cursor=pointer]
- complementary "选择内容" [ref=f1e87]:
- tablist "选择内容切换项" [ref=f1e88]:
- tab "自然地理区位" [selected] [ref=f1e89] [cursor=pointer]
- tab "设施类别" [ref=f1e90] [cursor=pointer]
- tab "建筑功能" [ref=f1e91] [cursor=pointer]
- tab "建设阶段" [ref=f1e92] [cursor=pointer]
- tab "规划形式" [ref=f1e93] [cursor=pointer]
- generic [ref=f1e94]:
- generic [ref=f1e95]: 自然地理区位
- generic [ref=f1e96]: 接口待接入
- dialog "建筑性质筛选" [ref=f1e97]:
- generic [ref=f1e98]:
- heading "建筑性质" [level=2] [ref=f1e99]
- button "关闭" [ref=f1e100] [cursor=pointer]: ×
- searchbox "搜索" [ref=f1e102]
- generic [ref=f1e103]: 已选 1 项
- tree [ref=f1e105]:
- treeitem [ref=f1e106]:
- button "公共建筑" [active] [pressed] [ref=f1e109] [cursor=pointer]
- treeitem [ref=f1e112]:
- button "民用建筑" [ref=f1e115] [cursor=pointer]
- treeitem [ref=f1e118]:
- button "工业建筑" [ref=f1e121] [cursor=pointer]
- generic [ref=f1e124]:
- button "清空当前" [ref=f1e125] [cursor=pointer]
- button "取消" [ref=f1e126] [cursor=pointer]
- button "确认" [ref=f1e127] [cursor=pointer]

View File

@ -0,0 +1,87 @@
- main [ref=f1e3]:
- generic:
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- generic: 众为数字化管理平台
- region "年度费用模板" [ref=f1e4]:
- generic "筛选条件" [ref=f1e5]:
- button "省市区" [ref=f1e6] [cursor=pointer]
- button "自然地理区位" [ref=f1e12] [cursor=pointer]
- button "设施类别" [ref=f1e17] [cursor=pointer]
- button "建筑功能" [ref=f1e23] [cursor=pointer]
- button "建筑性质" [ref=f1e28] [cursor=pointer]
- button "建设阶段" [ref=f1e33] [cursor=pointer]
- button "规划形式" [ref=f1e40] [cursor=pointer]
- button "时间" [ref=f1e47] [cursor=pointer]
- button "面积" [ref=f1e51] [cursor=pointer]
- region "年度总费用图表" [ref=f1e59]:
- generic [ref=f1e60]:
- button "纵坐标:造价(元)" [ref=f1e62] [cursor=pointer]: 造价(元)
- generic [ref=f1e63]:
- figure "图表共有0个系列":
- generic [ref=f1e64]:
- img "interactive chart"
- region [ref=f1e65]
- toolbar "标注" [ref=f1e66]:
- button "库" [ref=f1e67] [cursor=pointer]
- button "指" [ref=f1e68] [cursor=pointer]
- button "均" [ref=f1e69] [cursor=pointer]
- button "Line Tool" [disabled] [ref=f1e70]
- button "Text Tool" [disabled] [ref=f1e71]
- button "Shape Tool" [disabled] [ref=f1e72]
- button "Fibonacci Tool" [disabled] [ref=f1e73]
- button "全屏(F11)" [ref=f1e74] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=f1e75]
- button "切换到表格" [ref=f1e76] [cursor=pointer]:
- generic:
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=f1e77]:
- button "缩小" [disabled] [ref=f1e78]
- button "放大" [ref=f1e79] [cursor=pointer]
- button "左移" [disabled] [ref=f1e80]
- button "右移" [disabled] [ref=f1e81]
- button "重置" [disabled] [ref=f1e82]
- button "收起选择区" [expanded] [ref=f1e83] [cursor=pointer]
- complementary "选择内容" [ref=f1e87]:
- tablist "选择内容切换项" [ref=f1e88]:
- tab "自然地理区位" [selected] [ref=f1e89] [cursor=pointer]
- tab "设施类别" [ref=f1e90] [cursor=pointer]
- tab "建筑功能" [ref=f1e91] [cursor=pointer]
- tab "建设阶段" [ref=f1e92] [cursor=pointer]
- tab "规划形式" [ref=f1e93] [cursor=pointer]
- generic [ref=f1e94]:
- generic [ref=f1e95]: 自然地理区位
- generic [ref=f1e96]: 接口待接入
- dialog "建筑性质筛选" [ref=f1e97]:
- generic [ref=f1e98]:
- heading "建筑性质" [level=2] [ref=f1e99]
- button "关闭" [ref=f1e100] [cursor=pointer]: ×
- searchbox "搜索" [ref=f1e102]
- generic [ref=f1e103]: 已选 1 项
- tree [ref=f1e105]:
- treeitem [ref=f1e106]:
- button "公共建筑" [ref=f1e109] [cursor=pointer]
- treeitem [ref=f1e112]:
- button "民用建筑" [active] [pressed] [ref=f1e115] [cursor=pointer]
- treeitem [ref=f1e118]:
- button "工业建筑" [ref=f1e121] [cursor=pointer]
- generic [ref=f1e124]:
- button "清空当前" [ref=f1e125] [cursor=pointer]
- button "取消" [ref=f1e126] [cursor=pointer]
- button "确认" [ref=f1e127] [cursor=pointer]

View File

@ -0,0 +1,70 @@
- 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]
- button "自然地理区位" [ref=e12] [cursor=pointer]
- button "设施类别" [ref=e17] [cursor=pointer]
- button "建筑功能" [ref=e23] [cursor=pointer]
- button "建筑性质" [ref=e28] [cursor=pointer]
- button "建设阶段" [ref=e33] [cursor=pointer]
- button "规划形式" [ref=e40] [cursor=pointer]
- button "时间" [ref=e47] [cursor=pointer]
- button "面积" [ref=e51] [cursor=pointer]
- region "年度总费用图表" [ref=e59]:
- generic [ref=e60]:
- button "纵坐标:造价(元)" [ref=e62] [cursor=pointer]: 造价(元)
- generic [ref=e63]:
- figure "图表共有0个系列":
- generic [ref=e64]:
- img "interactive chart"
- region [ref=e65]
- toolbar "标注" [ref=e66]:
- button "库" [ref=e67] [cursor=pointer]
- button "指" [ref=e68] [cursor=pointer]
- button "均" [ref=e69] [cursor=pointer]
- button "Line Tool" [disabled] [ref=e70]
- button "Text Tool" [disabled] [ref=e71]
- button "Shape Tool" [disabled] [ref=e72]
- button "Fibonacci Tool" [disabled] [ref=e73]
- button "全屏(F11)" [ref=e74] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e75]
- button "切换到表格" [ref=e76] [cursor=pointer]:
- generic:
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=e77]:
- button "缩小" [disabled] [ref=e78]
- button "放大" [ref=e79] [cursor=pointer]
- button "左移" [disabled] [ref=e80]
- button "右移" [disabled] [ref=e81]
- button "重置" [disabled] [ref=e82]
- button "收起选择区" [expanded] [ref=e83] [cursor=pointer]
- complementary "选择内容" [ref=e87]:
- tablist "选择内容切换项" [ref=e88]:
- tab "自然地理区位" [selected] [ref=e89] [cursor=pointer]
- tab "设施类别" [ref=e90] [cursor=pointer]
- tab "建筑功能" [ref=e91] [cursor=pointer]
- tab "建设阶段" [ref=e92] [cursor=pointer]
- tab "规划形式" [ref=e93] [cursor=pointer]
- generic [ref=e94]:
- generic [ref=e95]: 自然地理区位
- generic [ref=e96]: 加载中

View File

@ -0,0 +1,85 @@
- 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]
- button "自然地理区位" [ref=e12] [cursor=pointer]
- button "设施类别" [ref=e17] [cursor=pointer]
- button "建筑功能" [ref=e23] [cursor=pointer]
- button "建筑性质" [active] [ref=e28] [cursor=pointer]
- button "建设阶段" [ref=e33] [cursor=pointer]
- button "规划形式" [ref=e40] [cursor=pointer]
- button "时间" [ref=e47] [cursor=pointer]
- button "面积" [ref=e51] [cursor=pointer]
- region "年度总费用图表" [ref=e59]:
- generic [ref=e60]:
- button "纵坐标:造价(元)" [ref=e62] [cursor=pointer]: 造价(元)
- generic [ref=e63]:
- figure "图表共有0个系列":
- generic [ref=e64]:
- img "interactive chart"
- region [ref=e65]
- toolbar "标注" [ref=e66]:
- button "库" [ref=e67] [cursor=pointer]
- button "指" [ref=e68] [cursor=pointer]
- button "均" [ref=e69] [cursor=pointer]
- button "Line Tool" [disabled] [ref=e70]
- button "Text Tool" [disabled] [ref=e71]
- button "Shape Tool" [disabled] [ref=e72]
- button "Fibonacci Tool" [disabled] [ref=e73]
- button "全屏(F11)" [ref=e74] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e75]
- button "切换到表格" [ref=e76] [cursor=pointer]:
- generic:
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=e77]:
- button "缩小" [disabled] [ref=e78]
- button "放大" [ref=e79] [cursor=pointer]
- button "左移" [disabled] [ref=e80]
- button "右移" [disabled] [ref=e81]
- button "重置" [disabled] [ref=e82]
- button "收起选择区" [expanded] [ref=e83] [cursor=pointer]
- complementary "选择内容" [ref=e87]:
- tablist "选择内容切换项" [ref=e88]:
- tab "自然地理区位" [selected] [ref=e89] [cursor=pointer]
- tab "设施类别" [ref=e90] [cursor=pointer]
- tab "建筑功能" [ref=e91] [cursor=pointer]
- tab "建设阶段" [ref=e92] [cursor=pointer]
- tab "规划形式" [ref=e93] [cursor=pointer]
- generic [ref=e94]:
- generic [ref=e95]: 自然地理区位
- generic [ref=e96]: 接口待接入
- dialog "建筑性质筛选" [ref=e97]:
- generic [ref=e98]:
- heading "建筑性质" [level=2] [ref=e99]
- button "关闭" [ref=e100] [cursor=pointer]: ×
- searchbox "搜索" [ref=e102]
- generic [ref=e103]: 未选择
- tree [ref=e105]:
- treeitem [ref=e106]:
- button "公共建筑" [ref=e109] [cursor=pointer]
- treeitem [ref=e112]:
- button "民用建筑" [ref=e115] [cursor=pointer]
- generic [ref=e118]:
- button "清空当前" [ref=e119] [cursor=pointer]
- button "取消" [ref=e120] [cursor=pointer]
- button "确认" [ref=e121] [cursor=pointer]

View File

@ -0,0 +1,85 @@
- 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]
- button "自然地理区位" [ref=e12] [cursor=pointer]
- button "设施类别" [ref=e17] [cursor=pointer]
- button "建筑功能" [ref=e23] [cursor=pointer]
- button "建筑性质" [ref=e28] [cursor=pointer]
- button "建设阶段" [ref=e33] [cursor=pointer]
- button "规划形式" [ref=e40] [cursor=pointer]
- button "时间" [ref=e47] [cursor=pointer]
- button "面积" [ref=e51] [cursor=pointer]
- region "年度总费用图表" [ref=e59]:
- generic [ref=e60]:
- button "纵坐标:造价(元)" [ref=e62] [cursor=pointer]: 造价(元)
- generic [ref=e63]:
- figure "图表共有0个系列":
- generic [ref=e64]:
- img "interactive chart"
- region [ref=e65]
- toolbar "标注" [ref=e66]:
- button "库" [ref=e67] [cursor=pointer]
- button "指" [ref=e68] [cursor=pointer]
- button "均" [ref=e69] [cursor=pointer]
- button "Line Tool" [disabled] [ref=e70]
- button "Text Tool" [disabled] [ref=e71]
- button "Shape Tool" [disabled] [ref=e72]
- button "Fibonacci Tool" [disabled] [ref=e73]
- button "全屏(F11)" [ref=e74] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e75]
- button "切换到表格" [ref=e76] [cursor=pointer]:
- generic:
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=e77]:
- button "缩小" [disabled] [ref=e78]
- button "放大" [ref=e79] [cursor=pointer]
- button "左移" [disabled] [ref=e80]
- button "右移" [disabled] [ref=e81]
- button "重置" [disabled] [ref=e82]
- button "收起选择区" [expanded] [ref=e83] [cursor=pointer]
- complementary "选择内容" [ref=e87]:
- tablist "选择内容切换项" [ref=e88]:
- tab "自然地理区位" [selected] [ref=e89] [cursor=pointer]
- tab "设施类别" [ref=e90] [cursor=pointer]
- tab "建筑功能" [ref=e91] [cursor=pointer]
- tab "建设阶段" [ref=e92] [cursor=pointer]
- tab "规划形式" [ref=e93] [cursor=pointer]
- generic [ref=e94]:
- generic [ref=e95]: 自然地理区位
- generic [ref=e96]: 接口待接入
- dialog "建筑性质筛选" [ref=e97]:
- generic [ref=e98]:
- heading "建筑性质" [level=2] [ref=e99]
- button "关闭" [ref=e100] [cursor=pointer]: ×
- searchbox "搜索" [ref=e102]
- generic [ref=e103]: 已选 1 项
- tree [ref=e105]:
- treeitem [ref=e106]:
- button "公共建筑" [active] [pressed] [ref=e109] [cursor=pointer]
- treeitem [ref=e112]:
- button "民用建筑" [ref=e115] [cursor=pointer]
- generic [ref=e118]:
- button "清空当前" [ref=e119] [cursor=pointer]
- button "取消" [ref=e120] [cursor=pointer]
- button "确认" [ref=e121] [cursor=pointer]

View File

@ -0,0 +1,85 @@
- 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]
- button "自然地理区位" [ref=e12] [cursor=pointer]
- button "设施类别" [ref=e17] [cursor=pointer]
- button "建筑功能" [ref=e23] [cursor=pointer]
- button "建筑性质" [ref=e28] [cursor=pointer]
- button "建设阶段" [ref=e33] [cursor=pointer]
- button "规划形式" [ref=e40] [cursor=pointer]
- button "时间" [ref=e47] [cursor=pointer]
- button "面积" [ref=e51] [cursor=pointer]
- region "年度总费用图表" [ref=e59]:
- generic [ref=e60]:
- button "纵坐标:造价(元)" [ref=e62] [cursor=pointer]: 造价(元)
- generic [ref=e63]:
- figure "图表共有0个系列":
- generic [ref=e64]:
- img "interactive chart"
- region [ref=e65]
- toolbar "标注" [ref=e66]:
- button "库" [ref=e67] [cursor=pointer]
- button "指" [ref=e68] [cursor=pointer]
- button "均" [ref=e69] [cursor=pointer]
- button "Line Tool" [disabled] [ref=e70]
- button "Text Tool" [disabled] [ref=e71]
- button "Shape Tool" [disabled] [ref=e72]
- button "Fibonacci Tool" [disabled] [ref=e73]
- button "全屏(F11)" [ref=e74] [cursor=pointer]
- button "Clear annotations" [disabled] [ref=e75]
- button "切换到表格" [ref=e76] [cursor=pointer]:
- generic:
- status:
- generic: 请选择右侧分类项
- toolbar "缩放" [ref=e77]:
- button "缩小" [disabled] [ref=e78]
- button "放大" [ref=e79] [cursor=pointer]
- button "左移" [disabled] [ref=e80]
- button "右移" [disabled] [ref=e81]
- button "重置" [disabled] [ref=e82]
- button "收起选择区" [expanded] [ref=e83] [cursor=pointer]
- complementary "选择内容" [ref=e87]:
- tablist "选择内容切换项" [ref=e88]:
- tab "自然地理区位" [selected] [ref=e89] [cursor=pointer]
- tab "设施类别" [ref=e90] [cursor=pointer]
- tab "建筑功能" [ref=e91] [cursor=pointer]
- tab "建设阶段" [ref=e92] [cursor=pointer]
- tab "规划形式" [ref=e93] [cursor=pointer]
- generic [ref=e94]:
- generic [ref=e95]: 自然地理区位
- generic [ref=e96]: 接口待接入
- dialog "建筑性质筛选" [ref=e97]:
- generic [ref=e98]:
- heading "建筑性质" [level=2] [ref=e99]
- button "关闭" [ref=e100] [cursor=pointer]: ×
- searchbox "搜索" [ref=e102]
- generic [ref=e103]: 已选 1 项
- tree [ref=e105]:
- treeitem [ref=e106]:
- button "公共建筑" [ref=e109] [cursor=pointer]
- treeitem [ref=e112]:
- button "民用建筑" [active] [pressed] [ref=e115] [cursor=pointer]
- generic [ref=e118]:
- button "清空当前" [ref=e119] [cursor=pointer]
- button "取消" [ref=e120] [cursor=pointer]
- button "确认" [ref=e121] [cursor=pointer]

View File

@ -12,7 +12,7 @@ import {
} from 'ag-grid-community'; } from 'ag-grid-community';
import type { AgCartesianChartOptions } from 'ag-charts-community'; import type { AgCartesianChartOptions } from 'ag-charts-community';
import { ModuleRegistry } from 'ag-charts-community'; import { ModuleRegistry } from 'ag-charts-community';
import { Building2, CalendarRange, Construction, LayoutGrid, Library, LocateFixed, MapPinned, PanelRightClose, PanelRightOpen, Ruler, SquareFunction, Waypoints } from 'lucide-react'; import { Building2, CalendarRange, Construction, House, LayoutGrid, Library, LocateFixed, MapPinned, PanelRightClose, PanelRightOpen, Ruler, SquareFunction, Waypoints } from 'lucide-react';
import { import {
AnnotationsModule, AnnotationsModule,
ContextMenuModule, ContextMenuModule,
@ -75,6 +75,7 @@ const filterOptions = [
{ key: 'geoLocation', label: '自然地理区位', icon: LocateFixed }, { key: 'geoLocation', label: '自然地理区位', icon: LocateFixed },
{ key: 'facilityType', label: '设施类别', icon: Building2 }, { key: 'facilityType', label: '设施类别', icon: Building2 },
{ key: 'buildingFunction', label: '建筑功能', icon: SquareFunction }, { key: 'buildingFunction', label: '建筑功能', icon: SquareFunction },
{ key: 'buildingNature', label: '建筑性质', icon: House },
{ key: 'constructionStage', label: '建设阶段', icon: Construction }, { key: 'constructionStage', label: '建设阶段', icon: Construction },
{ key: 'planningForm', label: '规划形式', icon: LayoutGrid }, { key: 'planningForm', label: '规划形式', icon: LayoutGrid },
{ key: 'time', label: '时间', icon: CalendarRange }, { key: 'time', label: '时间', icon: CalendarRange },
@ -140,6 +141,26 @@ const contentTreeConfigs = {
}, },
} as const; } as const;
const buildingNatureBrowserConfig = {
conditionEndpoint: '/api/public/browser/condition/256',
dataEndpoint: '/api/public/browser/data/256',
treeid: '95504',
fieldid: '316390',
searchbrowserid: '36523',
browserParams: {
requestid: '',
isshowsearchtab: '1',
workflowid: '182028',
wfid: '182028',
billid: '-1815',
f_weaver_belongto_userid: '',
f_weaver_belongto_usertype: '',
wf_isagent: '',
wf_beagenter: '',
wfCreater: '',
},
} as const;
const chartLineColors = ['#0078a8', '#d14d72', '#1f8f4d', '#d96f23', '#6b5cc8', '#0d7680', '#9a6b12', '#b24b38']; const chartLineColors = ['#0078a8', '#d14d72', '#1f8f4d', '#d96f23', '#6b5cc8', '#0d7680', '#9a6b12', '#b24b38'];
const defaultTemplateFilterNode = { const defaultTemplateFilterNode = {
id: '3', id: '3',
@ -603,12 +624,16 @@ function isIndicatorTreeFilterKey(filterKey: FilterKey): filterKey is 'indicator
return filterKey === 'indicatorTree'; return filterKey === 'indicatorTree';
} }
function isBuildingNatureFilterKey(filterKey: FilterKey): filterKey is 'buildingNature' {
return filterKey === 'buildingNature';
}
function isRangeFilterKey(filterKey: FilterKey): filterKey is RangeFilterKey { function isRangeFilterKey(filterKey: FilterKey): filterKey is RangeFilterKey {
return filterKey === 'time' || filterKey === 'area'; return filterKey === 'time' || filterKey === 'area';
} }
function isSingleSelectFilterKey(filterKey: FilterKey) { function isSingleSelectFilterKey(filterKey: FilterKey) {
return isTemplateFilterKey(filterKey) || isIndicatorTreeFilterKey(filterKey); return isTemplateFilterKey(filterKey) || isIndicatorTreeFilterKey(filterKey) || isBuildingNatureFilterKey(filterKey);
} }
function getDefaultTemplateFilterNodes(): SelectedFilterNode[] { function getDefaultTemplateFilterNodes(): SelectedFilterNode[] {
@ -768,6 +793,7 @@ function App() {
geoLocation: false, geoLocation: false,
facilityType: false, facilityType: false,
buildingFunction: false, buildingFunction: false,
buildingNature: false,
constructionStage: false, constructionStage: false,
planningForm: false, planningForm: false,
time: false, time: false,
@ -818,6 +844,7 @@ function App() {
geoLocation: [], geoLocation: [],
facilityType: [], facilityType: [],
buildingFunction: [], buildingFunction: [],
buildingNature: [],
constructionStage: [], constructionStage: [],
planningForm: [], planningForm: [],
time: [], time: [],
@ -830,6 +857,7 @@ function App() {
geoLocation: false, geoLocation: false,
facilityType: false, facilityType: false,
buildingFunction: false, buildingFunction: false,
buildingNature: false,
constructionStage: false, constructionStage: false,
planningForm: false, planningForm: false,
time: false, time: false,
@ -842,6 +870,7 @@ function App() {
geoLocation: null, geoLocation: null,
facilityType: null, facilityType: null,
buildingFunction: null, buildingFunction: null,
buildingNature: null,
constructionStage: null, constructionStage: null,
planningForm: null, planningForm: null,
time: null, time: null,
@ -854,6 +883,7 @@ function App() {
geoLocation: [], geoLocation: [],
facilityType: [], facilityType: [],
buildingFunction: [], buildingFunction: [],
buildingNature: [],
constructionStage: [], constructionStage: [],
planningForm: [], planningForm: [],
time: [], time: [],
@ -866,6 +896,7 @@ function App() {
geoLocation: false, geoLocation: false,
facilityType: false, facilityType: false,
buildingFunction: false, buildingFunction: false,
buildingNature: false,
constructionStage: false, constructionStage: false,
planningForm: false, planningForm: false,
time: false, time: false,
@ -878,6 +909,7 @@ function App() {
geoLocation: null, geoLocation: null,
facilityType: null, facilityType: null,
buildingFunction: null, buildingFunction: null,
buildingNature: null,
constructionStage: null, constructionStage: null,
planningForm: null, planningForm: null,
time: null, time: null,
@ -890,6 +922,7 @@ function App() {
geoLocation: [], geoLocation: [],
facilityType: [], facilityType: [],
buildingFunction: [], buildingFunction: [],
buildingNature: [],
constructionStage: [], constructionStage: [],
planningForm: [], planningForm: [],
time: [], time: [],
@ -908,6 +941,7 @@ function App() {
geoLocation: 0, geoLocation: 0,
facilityType: 0, facilityType: 0,
buildingFunction: 0, buildingFunction: 0,
buildingNature: 0,
constructionStage: 0, constructionStage: 0,
planningForm: 0, planningForm: 0,
time: 0, time: 0,
@ -1032,7 +1066,7 @@ function App() {
); );
const pivotGridPinnedBottomRowData = useMemo<PivotGridRow[]>( const pivotGridPinnedBottomRowData = useMemo<PivotGridRow[]>(
() => { () => {
if (hasTimeFilter) return []; if (selectedContentNodes.length === 0 || hasTimeFilter) return [];
const datum = chartSummaryBySelection[overallSummaryKey] const datum = chartSummaryBySelection[overallSummaryKey]
?? selectedContentNodes ?? selectedContentNodes
.map((node) => chartSummaryBySelection[getSelectionKey(node.contentKey, node.id)]) .map((node) => chartSummaryBySelection[getSelectionKey(node.contentKey, node.id)])
@ -1243,6 +1277,7 @@ function App() {
[ [
appliedFilters.area, appliedFilters.area,
appliedFilters.buildingFunction, appliedFilters.buildingFunction,
appliedFilters.buildingNature,
appliedFilters.constructionStage, appliedFilters.constructionStage,
appliedFilters.facilityType, appliedFilters.facilityType,
appliedFilters.geoLocation, appliedFilters.geoLocation,
@ -1302,6 +1337,65 @@ function App() {
return normalizeTreeRows(rows); return normalizeTreeRows(rows);
}; };
const fetchBuildingNatureFilterTree = async (nodeId?: string, signal?: AbortSignal) => {
const treeParams = {
...browserTreeDefaults,
...buildingNatureBrowserConfig.browserParams,
treeid: buildingNatureBrowserConfig.treeid,
cube_treeid: buildingNatureBrowserConfig.treeid,
searchbrowserid: buildingNatureBrowserConfig.searchbrowserid,
fieldid: buildingNatureBrowserConfig.fieldid,
};
const requestOptions: RequestInit = {
credentials: 'include',
signal,
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
};
if (!nodeId) {
const conditionResponse = await fetch(
`${buildingNatureBrowserConfig.conditionEndpoint}?${buildQuery(treeParams)}`,
requestOptions,
);
if (!conditionResponse.ok) {
throw new Error(`建筑性质浏览条件加载失败HTTP ${conditionResponse.status}`);
}
const conditionPayload = await conditionResponse.json() as { status?: boolean; msg?: string };
if (conditionPayload.status === false) {
throw new Error(conditionPayload.msg || '建筑性质浏览条件加载失败');
}
}
const dataParams = nodeId
? {
...treeParams,
type: '2',
id: nodeId,
isVirtual: '',
}
: {
...treeParams,
pageSize: '10',
current: '1',
min: '1',
max: '10',
};
const dataResponse = await fetch(
`${buildingNatureBrowserConfig.dataEndpoint}?${buildQuery(dataParams)}`,
requestOptions,
);
if (!dataResponse.ok) {
throw new Error(`建筑性质浏览数据加载失败HTTP ${dataResponse.status}`);
}
const dataPayload = await dataResponse.json() as { status?: boolean; msg?: string };
if (dataPayload.status === false) {
throw new Error(dataPayload.msg || '建筑性质浏览数据加载失败');
}
return normalizeTreeRows(pickArray(dataPayload));
};
const normalizeBackendTree = (nodes: TreeNode[]): TreeNode[] => nodes.map((node) => ({ const normalizeBackendTree = (nodes: TreeNode[]): TreeNode[] => nodes.map((node) => ({
...node, ...node,
hasChildren: node.children.length > 0 || node.hasChildren, hasChildren: node.children.length > 0 || node.hasChildren,
@ -1342,7 +1436,7 @@ function App() {
}; };
const fetchTemplateLibraryTree = async (signal?: AbortSignal) => { const fetchTemplateLibraryTree = async (signal?: AbortSignal) => {
const response = await fetch(`${API_BASE_URL}/zw/getBuildingFunctionCostFilterTree?${buildQuery({ key: 'templateLibrary' })}`, { const response = await fetch(`${API_BASE_URL}${API_ROUTES.filterTree}?${buildQuery({ key: 'templateLibrary' })}`, {
signal, signal,
headers: { headers: {
'X-Requested-With': 'XMLHttpRequest', 'X-Requested-With': 'XMLHttpRequest',
@ -1357,7 +1451,7 @@ function App() {
}; };
const fetchIndicatorTree = async (signal?: AbortSignal) => { const fetchIndicatorTree = async (signal?: AbortSignal) => {
const response = await fetch(`${API_BASE_URL}/zw/getBuildingFunctionCostFilterTree?${buildQuery({ key: 'indicatorTree', templateId: selectedTemplateId })}`, { const response = await fetch(`${API_BASE_URL}${API_ROUTES.filterTree}?${buildQuery({ key: 'indicatorTree', templateId: selectedTemplateId })}`, {
signal, signal,
headers: { headers: {
'X-Requested-With': 'XMLHttpRequest', 'X-Requested-With': 'XMLHttpRequest',
@ -1415,6 +1509,12 @@ function App() {
}; };
const loadFilterTree = async (filterKey: FilterKey, keyword?: string, signal?: AbortSignal) => { const loadFilterTree = async (filterKey: FilterKey, keyword?: string, signal?: AbortSignal) => {
if (isBuildingNatureFilterKey(filterKey)) {
const nodes = filterTreeByKey.buildingNature.length > 0
? filterTreeByKey.buildingNature
: await fetchBuildingNatureFilterTree(undefined, signal);
return keyword?.trim() ? filterTreeNodesByKeyword(nodes, keyword) : nodes;
}
if (filterKey === 'region') { if (filterKey === 'region') {
const nodes = await fetchRegionFilterTree(signal); const nodes = await fetchRegionFilterTree(signal);
return keyword?.trim() ? filterTreeNodesByKeyword(nodes, keyword) : nodes; return keyword?.trim() ? filterTreeNodesByKeyword(nodes, keyword) : nodes;
@ -1621,7 +1721,7 @@ function App() {
return; return;
} }
if (isTemplateFilterKey(filterKey) || filterKey === 'indicatorTree') { if (isTemplateFilterKey(filterKey) || filterKey === 'indicatorTree' || isBuildingNatureFilterKey(filterKey)) {
filterSearchTimerRef.current = window.setTimeout(() => { filterSearchTimerRef.current = window.setTimeout(() => {
setFilterSearchLoadingByKey((current) => ({ ...current, [filterKey]: true })); setFilterSearchLoadingByKey((current) => ({ ...current, [filterKey]: true }));
setFilterSearchErrorByKey((current) => ({ ...current, [filterKey]: null })); setFilterSearchErrorByKey((current) => ({ ...current, [filterKey]: null }));
@ -1678,10 +1778,13 @@ function App() {
})), })),
})); }));
if (node.loaded || !isContentFilterKey(filterModalKey)) return; if (node.loaded || (!isContentFilterKey(filterModalKey) && !isBuildingNatureFilterKey(filterModalKey))) return;
const currentFilterKey = filterModalKey; const currentFilterKey = filterModalKey;
fetchContentTree(currentFilterKey, nodeId) const childRequest = isBuildingNatureFilterKey(currentFilterKey)
? fetchBuildingNatureFilterTree(nodeId)
: fetchContentTree(currentFilterKey, nodeId);
childRequest
.then((children) => { .then((children) => {
setFilterTreeByKey((current) => ({ setFilterTreeByKey((current) => ({
...current, ...current,
@ -1921,6 +2024,11 @@ function App() {
async function loadStats() { async function loadStats() {
if (selectedContentNodes.length === 0) { if (selectedContentNodes.length === 0) {
setChartDataBySelection({}); setChartDataBySelection({});
setChartSummaryBySelection({});
setLoading(false);
setLoadingHint('');
setLoadError(null);
return;
} }
setLoading(true); setLoading(true);
@ -1957,21 +2065,17 @@ function App() {
} }
const payload = (await response.json()) as { data?: ApiBuildingFunctionStatBatchItem[] }; const payload = (await response.json()) as { data?: ApiBuildingFunctionStatBatchItem[] };
const results = (payload.data ?? []) const results = (payload.data ?? [])
.filter((item) => item.key) .filter((item) => item.key && item.key !== overallSummaryKey)
.map((item) => [item.key as string, (item.data ?? []).map(normalizeStat).slice(0, 36)] as const); .map((item) => [item.key as string, (item.data ?? []).map(normalizeStat).slice(0, 36)] as const);
const summaries = (payload.data ?? []) const summaries = (payload.data ?? [])
.filter((item) => item.key && item.summary) .filter((item) => item.key && item.summary)
.map((item) => [item.key as string, normalizeStat(item.summary as ApiBuildingFunctionStat)] as const); .map((item) => [item.key as string, normalizeStat(item.summary as ApiBuildingFunctionStat)] as const);
const overallSummary = (payload.data ?? []).find((item) => item.summary)?.summary; const overallSummary = (payload.data ?? []).find((item) => item.key === overallSummaryKey)?.summary;
setChartDataBySelection((current) => ({ setChartDataBySelection(Object.fromEntries(results));
...current, setChartSummaryBySelection({
...Object.fromEntries(results),
}));
setChartSummaryBySelection((current) => ({
...current,
...Object.fromEntries(summaries), ...Object.fromEntries(summaries),
...(overallSummary ? { [overallSummaryKey]: normalizeStat(overallSummary) } : {}), ...(overallSummary ? { [overallSummaryKey]: normalizeStat(overallSummary) } : {}),
})); });
} catch (error) { } catch (error) {
if (controller.signal.aborted) return; if (controller.signal.aborted) return;
setLoadError(error instanceof Error ? error.message : '接口请求失败'); setLoadError(error instanceof Error ? error.message : '接口请求失败');
@ -2472,6 +2576,7 @@ function App() {
geoLocation: [], geoLocation: [],
facilityType: [], facilityType: [],
buildingFunction: [], buildingFunction: [],
buildingNature: [],
constructionStage: [], constructionStage: [],
planningForm: [], planningForm: [],
time: [], time: [],