Compare commits
3 Commits
main
...
building-f
| Author | SHA1 | Date | |
|---|---|---|---|
| 58abe588aa | |||
| 46325ee801 | |||
| c65235f377 |
3
.playwright-mcp/console-2026-05-13T08-06-15-907Z.log
Normal file
3
.playwright-mcp/console-2026-05-13T08-06-15-907Z.log
Normal 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
|
||||
6
.playwright-mcp/console-2026-05-13T08-22-17-883Z.log
Normal file
6
.playwright-mcp/console-2026-05-13T08-22-17-883Z.log
Normal 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¤ttime=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¤ttime=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¤ttime=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¤ttime=1778660591693&__random__=1778660591693:0
|
||||
84
.playwright-mcp/page-2026-05-13T08-06-23-224Z.yml
Normal file
84
.playwright-mcp/page-2026-05-13T08-06-23-224Z.yml
Normal 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]: 加载中
|
||||
84
.playwright-mcp/page-2026-05-13T08-22-19-114Z.yml
Normal file
84
.playwright-mcp/page-2026-05-13T08-22-19-114Z.yml
Normal 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]: 加载中
|
||||
@ -1,10 +1,10 @@
|
||||
# 组团趋势图
|
||||
# 建筑设施对象趋势图
|
||||
|
||||
这是一个基于 `React + AG Charts` 的组团趋势图页面,用来查看不同分类维度下的年度统计趋势,并通过右侧筛选条件联动图表结果。
|
||||
这是一个基于 `React + AG Charts` 的建筑设施对象趋势图页面,用来查看不同分类维度下的年度统计趋势,并通过右侧筛选条件联动图表结果。
|
||||
|
||||
## 功能
|
||||
|
||||
- 左侧展示组团趋势图,支持最低值、最高值、平均值、中位数和数据量切换
|
||||
- 左侧展示建筑设施对象趋势图,支持最低值、最高值、平均值、中位数和数据量切换
|
||||
- 右侧展示分类树,支持按 `自然地理区位 / 设施类别 / 建设阶段 / 规划形式` 选择节点
|
||||
- 筛选条件支持 `省市区`,后端会根据 `uf_xzqy` 展开到区级 `id` 后再过滤
|
||||
- 支持搜索筛选树节点,支持多条件叠加
|
||||
|
||||
62
src/App.tsx
62
src/App.tsx
@ -2,7 +2,7 @@ import { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { AgCharts } from 'ag-charts-react';
|
||||
import type { AgCartesianChartOptions } from 'ag-charts-community';
|
||||
import { ModuleRegistry } from 'ag-charts-community';
|
||||
import { Building2, Construction, LayoutGrid, Library, LocateFixed, MapPinned, Waypoints } from 'lucide-react';
|
||||
import { Building2, Construction, LayoutGrid, Library, LocateFixed, MapPinned, SquareFunction, Waypoints } from 'lucide-react';
|
||||
import {
|
||||
AnnotationsModule,
|
||||
ContextMenuModule,
|
||||
@ -18,6 +18,12 @@ ModuleRegistry.registerModules([AnnotationsModule, ContextMenuModule, ZoomModule
|
||||
const API_BASE_URL = 'https://nest.zwgczx.com/api/v1';
|
||||
// const API_BASE_URL = 'http://127.0.0.1:9089/api/v1';
|
||||
|
||||
const API_ROUTES = {
|
||||
filterTree: '/zw/getBuildingFacilityObjectFilterTree',
|
||||
filterTreeSearch: '/zw/getBuildingFacilityObjectFilterTreeSearch',
|
||||
statsBatch: '/zw/getBuildingFacilityObjectStatsBatch',
|
||||
} as const;
|
||||
|
||||
const statisticOptions = [
|
||||
{ key: 'minValue', label: '最低值', shortLabel: '低' },
|
||||
{ key: 'maxValue', label: '最高值', shortLabel: '高' },
|
||||
@ -36,6 +42,7 @@ const metricOptions = [
|
||||
const contentOptions = [
|
||||
{ key: 'geoLocation', label: '自然地理区位' },
|
||||
{ key: 'facilityType', label: '设施类别' },
|
||||
{ key: 'buildingFunction', label: '建筑功能' },
|
||||
{ key: 'constructionStage', label: '建设阶段' },
|
||||
{ key: 'planningForm', label: '规划形式' },
|
||||
] as const;
|
||||
@ -46,6 +53,7 @@ const filterOptions = [
|
||||
{ key: 'region', label: '省市区', icon: MapPinned },
|
||||
{ key: 'geoLocation', label: '自然地理区位', icon: LocateFixed },
|
||||
{ key: 'facilityType', label: '设施类别', icon: Building2 },
|
||||
{ key: 'buildingFunction', label: '建筑功能', icon: SquareFunction },
|
||||
{ key: 'constructionStage', label: '建设阶段', icon: Construction },
|
||||
{ key: 'planningForm', label: '规划形式', icon: LayoutGrid },
|
||||
] as const;
|
||||
@ -84,6 +92,17 @@ const contentTreeConfigs = {
|
||||
fieldid: '305426',
|
||||
defaultExpandedLevel: 3,
|
||||
},
|
||||
buildingFunction: {
|
||||
endpoint: '/api/public/browser/data/256',
|
||||
treeid: '95004',
|
||||
fieldid: '305919',
|
||||
defaultExpandedLevel: 0,
|
||||
browserParams: {
|
||||
workflowid: '182032',
|
||||
wfid: '182032',
|
||||
billid: '-1817',
|
||||
},
|
||||
},
|
||||
constructionStage: {
|
||||
endpoint: '/api/public/browser/data/256',
|
||||
treeid: '94007',
|
||||
@ -643,6 +662,7 @@ function App() {
|
||||
const treeInitialLoadStartedRef = useRef<Record<ContentKey, boolean>>({
|
||||
geoLocation: false,
|
||||
facilityType: false,
|
||||
buildingFunction: false,
|
||||
constructionStage: false,
|
||||
planningForm: false,
|
||||
});
|
||||
@ -652,6 +672,7 @@ function App() {
|
||||
region: false,
|
||||
geoLocation: false,
|
||||
facilityType: false,
|
||||
buildingFunction: false,
|
||||
constructionStage: false,
|
||||
planningForm: false,
|
||||
});
|
||||
@ -664,18 +685,21 @@ function App() {
|
||||
const [treeByContent, setTreeByContent] = useState<Record<ContentKey, TreeNode[]>>({
|
||||
geoLocation: [],
|
||||
facilityType: [],
|
||||
buildingFunction: [],
|
||||
constructionStage: [],
|
||||
planningForm: [],
|
||||
});
|
||||
const [treeLoadingByContent, setTreeLoadingByContent] = useState<Record<ContentKey, boolean>>({
|
||||
geoLocation: false,
|
||||
facilityType: false,
|
||||
buildingFunction: false,
|
||||
constructionStage: false,
|
||||
planningForm: false,
|
||||
});
|
||||
const [treeErrorByContent, setTreeErrorByContent] = useState<Record<ContentKey, string | null>>({
|
||||
geoLocation: null,
|
||||
facilityType: null,
|
||||
buildingFunction: null,
|
||||
constructionStage: null,
|
||||
planningForm: null,
|
||||
});
|
||||
@ -691,6 +715,7 @@ function App() {
|
||||
region: [],
|
||||
geoLocation: [],
|
||||
facilityType: [],
|
||||
buildingFunction: [],
|
||||
constructionStage: [],
|
||||
planningForm: [],
|
||||
});
|
||||
@ -700,6 +725,7 @@ function App() {
|
||||
region: false,
|
||||
geoLocation: false,
|
||||
facilityType: false,
|
||||
buildingFunction: false,
|
||||
constructionStage: false,
|
||||
planningForm: false,
|
||||
});
|
||||
@ -709,6 +735,7 @@ function App() {
|
||||
region: null,
|
||||
geoLocation: null,
|
||||
facilityType: null,
|
||||
buildingFunction: null,
|
||||
constructionStage: null,
|
||||
planningForm: null,
|
||||
});
|
||||
@ -718,6 +745,7 @@ function App() {
|
||||
region: [],
|
||||
geoLocation: [],
|
||||
facilityType: [],
|
||||
buildingFunction: [],
|
||||
constructionStage: [],
|
||||
planningForm: [],
|
||||
});
|
||||
@ -727,6 +755,7 @@ function App() {
|
||||
region: false,
|
||||
geoLocation: false,
|
||||
facilityType: false,
|
||||
buildingFunction: false,
|
||||
constructionStage: false,
|
||||
planningForm: false,
|
||||
});
|
||||
@ -736,6 +765,7 @@ function App() {
|
||||
region: null,
|
||||
geoLocation: null,
|
||||
facilityType: null,
|
||||
buildingFunction: null,
|
||||
constructionStage: null,
|
||||
planningForm: null,
|
||||
});
|
||||
@ -745,6 +775,7 @@ function App() {
|
||||
region: [],
|
||||
geoLocation: [],
|
||||
facilityType: [],
|
||||
buildingFunction: [],
|
||||
constructionStage: [],
|
||||
planningForm: [],
|
||||
});
|
||||
@ -759,6 +790,7 @@ function App() {
|
||||
region: 0,
|
||||
geoLocation: 0,
|
||||
facilityType: 0,
|
||||
buildingFunction: 0,
|
||||
constructionStage: 0,
|
||||
planningForm: 0,
|
||||
});
|
||||
@ -828,6 +860,7 @@ function App() {
|
||||
}
|
||||
const treeParams = {
|
||||
...browserTreeDefaults,
|
||||
...('browserParams' in config ? config.browserParams : {}),
|
||||
treeid: config.treeid,
|
||||
cube_treeid: config.treeid,
|
||||
fieldid: config.fieldid,
|
||||
@ -885,7 +918,7 @@ function App() {
|
||||
};
|
||||
|
||||
const fetchRegionFilterTree = async (signal?: AbortSignal) => {
|
||||
const response = await fetch(`${API_BASE_URL}/zw/getBuildingFunctionCostFilterTree?${buildQuery({ key: 'region' })}`, {
|
||||
const response = await fetch(`${API_BASE_URL}${API_ROUTES.filterTree}?${buildQuery({ key: 'region' })}`, {
|
||||
signal,
|
||||
headers: {
|
||||
'X-Requested-With': 'XMLHttpRequest',
|
||||
@ -930,7 +963,7 @@ function App() {
|
||||
};
|
||||
|
||||
const fetchBackendFilterTreeSearch = async (filterKey: FilterKey, keyword: string, signal?: AbortSignal) => {
|
||||
const response = await fetch(`${API_BASE_URL}/zw/getBuildingFunctionCostFilterTreeSearch?${buildQuery({
|
||||
const response = await fetch(`${API_BASE_URL}${API_ROUTES.filterTreeSearch}?${buildQuery({
|
||||
key: filterKey,
|
||||
keyword,
|
||||
nodePrefix: isContentFilterKey(filterKey) ? getTreeNodePrefix(filterTreeByKey[filterKey]) : '',
|
||||
@ -1402,7 +1435,7 @@ function App() {
|
||||
return;
|
||||
}
|
||||
|
||||
const response = await fetch(`${API_BASE_URL}/zw/getBuildingFunctionCostStatsBatch`, {
|
||||
const response = await fetch(`${API_BASE_URL}${API_ROUTES.statsBatch}`, {
|
||||
method: 'POST',
|
||||
signal: controller.signal,
|
||||
headers: {
|
||||
@ -1463,18 +1496,27 @@ function App() {
|
||||
button.setAttribute(name, value);
|
||||
}
|
||||
};
|
||||
const enableCustomToolbarButton = (button: HTMLButtonElement) => {
|
||||
if (button.disabled) {
|
||||
button.disabled = false;
|
||||
}
|
||||
if (button.hasAttribute('disabled')) {
|
||||
button.removeAttribute('disabled');
|
||||
}
|
||||
setButtonAttribute(button, 'aria-disabled', 'false');
|
||||
};
|
||||
const syncToolbarButtons = () => {
|
||||
const templateButton = getTemplateButton();
|
||||
if (templateButton) {
|
||||
templateButton.classList.add('chart-template-button');
|
||||
setButtonAttribute(templateButton, 'aria-disabled', 'false');
|
||||
enableCustomToolbarButton(templateButton);
|
||||
setButtonAttribute(templateButton, 'aria-expanded', String(filterModalKey === 'templateLibrary'));
|
||||
}
|
||||
|
||||
const indicatorButton = getIndicatorButton();
|
||||
if (indicatorButton) {
|
||||
indicatorButton.classList.add('chart-indicator-button');
|
||||
setButtonAttribute(indicatorButton, 'aria-disabled', 'false');
|
||||
enableCustomToolbarButton(indicatorButton);
|
||||
setButtonAttribute(indicatorButton, 'aria-expanded', String(filterModalKey === 'indicatorTree'));
|
||||
}
|
||||
|
||||
@ -1489,7 +1531,7 @@ function App() {
|
||||
const isFullscreen = document.fullscreenElement === fullscreenTarget;
|
||||
button.classList.add('chart-fullscreen-button');
|
||||
button.classList.toggle('ag-charts-toolbar__button--active', isFullscreen);
|
||||
setButtonAttribute(button, 'aria-disabled', 'false');
|
||||
enableCustomToolbarButton(button);
|
||||
setButtonAttribute(button, 'aria-pressed', String(isFullscreen));
|
||||
icon?.classList.toggle('anticon-arrow-salt', !isFullscreen);
|
||||
icon?.classList.toggle('anticon-shrink', isFullscreen);
|
||||
@ -1498,7 +1540,7 @@ function App() {
|
||||
const statisticButton = getStatisticButton();
|
||||
if (statisticButton) {
|
||||
statisticButton.classList.add('chart-statistic-button');
|
||||
setButtonAttribute(statisticButton, 'aria-disabled', 'false');
|
||||
enableCustomToolbarButton(statisticButton);
|
||||
setButtonAttribute(statisticButton, 'aria-expanded', String(statisticMenuOpen));
|
||||
}
|
||||
};
|
||||
@ -1586,6 +1628,7 @@ function App() {
|
||||
window.setTimeout(syncToolbarButtons, 0),
|
||||
window.setTimeout(syncToolbarButtons, 100),
|
||||
window.setTimeout(syncToolbarButtons, 500),
|
||||
window.setTimeout(syncToolbarButtons, 1000),
|
||||
];
|
||||
document.addEventListener('keydown', handleKeyDown, true);
|
||||
document.addEventListener('fullscreenchange', handleFullscreenChange);
|
||||
@ -1606,7 +1649,7 @@ function App() {
|
||||
frame.removeEventListener('keydown', handleToolbarKeyDown, true);
|
||||
observer.disconnect();
|
||||
};
|
||||
}, [appliedFilters, filterModalKey, filterTreeByKey, statisticMenuOpen]);
|
||||
}, [activeContentKey, appliedFilters, filterModalKey, filterTreeByKey, selectedContentNodes.length, statisticMenuOpen]);
|
||||
|
||||
const chartOptions = useMemo<AgCartesianChartOptions>(() => {
|
||||
const groupNames: string[] = [];
|
||||
@ -1863,6 +1906,7 @@ function App() {
|
||||
region: [],
|
||||
geoLocation: [],
|
||||
facilityType: [],
|
||||
buildingFunction: [],
|
||||
constructionStage: [],
|
||||
planningForm: [],
|
||||
});
|
||||
|
||||
@ -361,8 +361,12 @@ button {
|
||||
|
||||
.chart-frame .chart-template-button,
|
||||
.chart-frame .chart-indicator-button,
|
||||
.chart-frame .chart-statistic-button {
|
||||
.chart-frame .chart-statistic-button,
|
||||
.chart-frame .chart-fullscreen-button {
|
||||
color: #46413b;
|
||||
cursor: pointer !important;
|
||||
opacity: 1 !important;
|
||||
pointer-events: auto !important;
|
||||
}
|
||||
|
||||
.chart-frame .ag-charts-myButton-template,
|
||||
@ -378,7 +382,8 @@ button {
|
||||
|
||||
.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-fullscreen-button.ag-charts-toolbar__button--active {
|
||||
color: #0078a8;
|
||||
border-color: rgba(0, 120, 168, 0.36);
|
||||
background: rgba(255, 252, 248, 0.94);
|
||||
|
||||
1
vite-test.err.log
Normal file
1
vite-test.err.log
Normal file
@ -0,0 +1 @@
|
||||
$ vite --host 0.0.0.0 --host "127.0.0.1" --port "5173"
|
||||
6
vite-test.out.log
Normal file
6
vite-test.out.log
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
[32m[1mVITE[22m v7.3.2[39m [2mready in [0m[1m307[22m[2m[0m ms[22m
|
||||
|
||||
[32m➜[39m [1mLocal[22m: [36mhttp://127.0.0.1:[1m5173[22m/[39m
|
||||
[2m[32m ➜[39m[22m[2m press [22m[1mh + enter[22m[2m to show help[22m
|
||||
[2m16:10:18[22m [36m[1m[vite][22m[39m [90m[2m(client)[22m[39m [32mhmr update [39m[2m/src/App.tsx[22m
|
||||
Loading…
x
Reference in New Issue
Block a user