import React, { useMemo, useState } from 'react'; import PanelBox from '../../components/PanelBox'; import { useDispatch, useSelector } from 'react-redux'; import { Switch, FormControlLabel, InputLabel, Select, MenuItem, FormControl } from '@material-ui/core/index' import { styled } from '@material-ui/styles'; import { TreeView, TreeItem } from '@material-ui/lab'; import { makeStyles } from '@material-ui/styles'; import ExpandMore from '@material-ui/icons/ExpandMore'; import ChevronRight from '@material-ui/icons/ChevronRight'; import FolderIcon from '@material-ui/icons/Folder'; import Box from '@material-ui/core/Box'; import Table from '@material-ui/core/Table'; import TableContainer from '@material-ui/core/TableContainer'; import TableBody from '@material-ui/core/TableBody'; import TableHead from '@material-ui/core/TableHead'; import TableRow from '@material-ui/core/TableRow'; import DpTableCell from '../../../../layouts/mui/DpTableCell'; import DpTableRow from '../../../../layouts/mui/DpTableRow'; import config from '../../../../config'; function HDReal({ style, onSelect }) { const dispatch = useDispatch(); const machengData = [ { id: '420981', name: '麻城市', children: [ { id: '420981001', name: '龙池桥街道', children: [{ id: '4209810011', name: '园林社区居民委员会山洪灾害防御预案', lgtd: 115.02073188, lttd: 31.18672346 }, { id: '4209810012', name: '城西社区居民委员会山洪灾害防御预案', lgtd: 115.02073188, lttd: 31.18672346 } ] }, { id: '420981002', name: '木子店镇', children:[{id: '4209810021', name: '木子店镇山洪灾害防御预案', lgtd: 115.36181316, lttd: 31.1908325}] }, { id: '420981003', name: '黄土岗镇', children:[{id: '4209810031', name: '黄土岗镇山洪灾害防御预案', lgtd: 115.07167872, lttd: 31.3749686}] }, { id: '420981004', name: '宋埠镇', children:[], }, { id: '420981005', name: '南湖街道', children:[], }, ], }, ]; const useStyles = makeStyles({ root: { height: 240, flexGrow: 1, maxWidth: 400, color: '#ffffff', '& .MuiTreeItem-root': { backgroundColor: 'transparent', '&:hover': { backgroundColor: 'rgba(255, 255, 255, 0.08)' }, '&.Mui-selected': { backgroundColor: 'rgba(255, 255, 255, 0.16)', '&:hover': { backgroundColor: 'rgba(255, 255, 255, 0.24)' } } }, '& .MuiTreeItem-content': { backgroundColor: 'transparent', color: '#ffffff' }, '& .MuiSvgIcon-root': { color: '#ffffff' } }, labelRoot: { display: 'flex', alignItems: 'center', padding: '2px 0' }, labelIcon: { marginRight: 8, fontSize: 20 }, labelText: { fontWeight: 'inherit', flexGrow: 1 }, numberText: { marginLeft: 8, fontSize: '0.85em', opacity: 0.8 } }); const flattenArray = (data) => { const result = []; const flatten = (item) => { // 保存当前节点信息 const { children, ...rest } = item; result.push(rest); // 递归处理子节点 if (children && children.length > 0) { children.forEach(child => flatten(child)); } }; // 处理根节点 data.forEach(item => flatten(item)); return result; }; const classes = useStyles(); const renderTree = (nodes) => { const labelContent = ( {nodes.name} {/* {!nodes.children ? `(${nodes.count})`:''} */} ); return ( {Array.isArray(nodes.children) ? nodes.children.map((node) => renderTree(node)) : null} ) } const dataObj = { '420981': [{ planName: '园林社区居民委员会山洪灾害防御预案', id: '1' }, { planName: '城西社区居民委员会山洪灾害防御预案', id: '2' }, { planName: '木子店镇山洪灾害防御预案', id: '1' }, { planName: '大堰河村村民委员会山洪灾害防御预案', id: '2' }, { planName: '黄土岗镇山洪灾害防御预案', id: '1' }, { planName: '土城村村民委员会山洪灾害防御预案', id: '2' }, { planName: '宋埠镇山洪灾害防御预案', id: '1' }, { planName: '拜郊村村民委员会山洪灾害防御预案', id: '2' }, { planName: '南湖街道山洪灾害防御预案', id: '1' }, { planName: '五里墩社区居民委员会山洪灾害防御预案', id: '2' } ], '420981001': [{ planName: '园林社区居民委员会山洪灾害防御预案', id: '1' }, { planName: '城西社区居民委员会山洪灾害防御预案', id: '2' }], '420981002': [{ planName: '木子店镇山洪灾害防御预案', id: '1' }, { planName: '大堰河村村民委员会山洪灾害防御预案', id: '2' }], '420981003':[{ planName: '黄土岗镇山洪灾害防御预案', id: '1' }, { planName: '土城村村民委员会山洪灾害防御预案', id: '2' }], '420981004':[{ planName: '宋埠镇山洪灾害防御预案', id: '1' }, { planName: '拜郊村村民委员会山洪灾害防御预案', id: '2' }], '420981005':[{ planName: '南湖街道山洪灾害防御预案', id: '1' }, { planName: '五里墩社区居民委员会山洪灾害防御预案', id: '2' }], } const flyTo = (record) => { const { lgtd, lttd } = record; if (lgtd && lttd) { dispatch.runtime.setFeaturePop({ type: '', properties: record, coordinates: [lgtd, lttd] }); dispatch.runtime.setCameraTarget({ center: [lgtd, lttd + config.poiPositionOffsetY.drp], zoom: 14, pitch: config.poiPitch, bearing: 0 }); } } const [tableData, setTableData] = useState([]) const handleNodeSelect = (event, nodeId) => { setTableData(dataObj[nodeId]) const flatData = flattenArray(machengData); const row = flatData.find(item => item.id == nodeId) dispatch.runtime.setShksh(row) flyTo(row) }; // 获取所有节点ID的函数 const getAllNodeIds = (nodes) => { if (Array.isArray(nodes)) { return nodes.reduce((ids, node) => [...ids, ...getAllNodeIds(node)], []); } let ids = [nodes.id]; if (nodes.children) { nodes.children.forEach(child => { ids = [...ids, ...getAllNodeIds(child)]; }); } return ids; }; // 获取所有节点ID const expandedIds = getAllNodeIds(machengData); return ( 区域选择 } defaultExpandIcon={} onNodeSelect={handleNodeSelect} defaultExpanded={expandedIds} > {renderTree(machengData[0])} {/* 预案列表 预案名称 {tableData.map((row) => ( {row.planName} ))} */} ) } export default HDReal;