diff --git a/super-screen/client/assets/images/homepage/communtity/checkbox.png b/super-screen/client/assets/images/homepage/communtity/checkbox.png new file mode 100644 index 0000000..6f099fe Binary files /dev/null and b/super-screen/client/assets/images/homepage/communtity/checkbox.png differ diff --git a/super-screen/client/assets/images/homepage/communtity/deviceinfowindow.png b/super-screen/client/assets/images/homepage/communtity/deviceinfowindow.png new file mode 100644 index 0000000..b5a1a90 Binary files /dev/null and b/super-screen/client/assets/images/homepage/communtity/deviceinfowindow.png differ diff --git a/super-screen/client/assets/images/homepage/communtity/giselectricity.png b/super-screen/client/assets/images/homepage/communtity/giselectricity.png new file mode 100644 index 0000000..4816561 Binary files /dev/null and b/super-screen/client/assets/images/homepage/communtity/giselectricity.png differ diff --git a/super-screen/client/assets/images/homepage/communtity/gishydrant.png b/super-screen/client/assets/images/homepage/communtity/gishydrant.png new file mode 100644 index 0000000..1bc29e9 Binary files /dev/null and b/super-screen/client/assets/images/homepage/communtity/gishydrant.png differ diff --git a/super-screen/client/assets/images/homepage/communtity/gissmoke.png b/super-screen/client/assets/images/homepage/communtity/gissmoke.png new file mode 100644 index 0000000..652c60d Binary files /dev/null and b/super-screen/client/assets/images/homepage/communtity/gissmoke.png differ diff --git a/super-screen/client/assets/images/homepage/communtity/gisvideo.png b/super-screen/client/assets/images/homepage/communtity/gisvideo.png new file mode 100644 index 0000000..682ccd5 Binary files /dev/null and b/super-screen/client/assets/images/homepage/communtity/gisvideo.png differ diff --git a/super-screen/client/assets/images/homepage/communtity/giswatertank.png b/super-screen/client/assets/images/homepage/communtity/giswatertank.png new file mode 100644 index 0000000..ccc5174 Binary files /dev/null and b/super-screen/client/assets/images/homepage/communtity/giswatertank.png differ diff --git a/super-screen/client/assets/images/homepage/fire/leader.png b/super-screen/client/assets/images/homepage/fire/leader.png new file mode 100644 index 0000000..3f75835 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/leader.png differ diff --git a/super-screen/client/assets/images/homepage/fire/smoke.png b/super-screen/client/assets/images/homepage/fire/smoke.png new file mode 100644 index 0000000..2d1d223 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/smoke.png differ diff --git a/super-screen/client/src/sections/community-safty/containers/gis.js b/super-screen/client/src/sections/community-safty/containers/gis.js index 07b1181..08b26a5 100644 --- a/super-screen/client/src/sections/community-safty/containers/gis.js +++ b/super-screen/client/src/sections/community-safty/containers/gis.js @@ -1,22 +1,26 @@ import React, { useEffect, useState } from 'react'; +import { Tooltip } from 'antd'; import { connect } from 'react-redux'; import { render } from 'react-dom'; -import { data as heatmapData } from './data' +import { useMockRequest } from '$utils'; import './gis.less' - const MAPDOMID = 'fs-amap-container'; let map = null; -let heatmap = null; -let loca = null; -let interval = null; -const MARKER_IMG_NAME = { - markergreen: '回迁房', - markerblue: '城中村', - markeryellow: '廉租房', +const TYPES = { + 1: '消防栓', + 2: '水箱', + 3: '烟感', + 4: '配电箱' } function Map(props) { const [delay, setDelay] = useState(true) const [tab, setTab] = useState('home') + const [type, setType] = useState(3) + + const { data: devices = [] } = useMockRequest({ + url: 'https://superchangnan.anxinyun.cn/api/xiaofang/devices', + method: 'mockGet', + }); // 地图初始化 const loadMap = () => { // 图片图层 实现瓦片地图中国地图样式 bounds 第一个点为左下角 第二个点为右上角 @@ -46,10 +50,11 @@ function Map(props) { }); map.on('complete', () => { - setTimeout(() => { - setDelay(false) - }, 1000); - + setDelay(false) + // setTimeout(() => { + // tab == 'home' && map && renderMarkers() + // tab == 'device' && map && renderDevices() + // }, 1000); }); map.on('click', (e) => { @@ -68,242 +73,75 @@ function Map(props) { console.log('e.lnglat' + e.lnglat) }) - loca = new Loca.Container({ map: map }) }; - - // 初始化GIS 组件销毁清空定时器 useEffect(() => { loadMap(); }, []); + useEffect(() => { + if (!delay) { + tab == 'home' && map && renderMarkers() + tab == 'device' && map && renderDevices() + } + }, [tab]); + + useEffect(() => { + if (!delay) map && renderDevices() + }, [type]); + + const renderMarkers = () => { map.clearMap(); map.setZoom(10.3) map.setCenter([116.054664, 28.538966]) map.setPitch(22.9) map.setRotation(1.7000) - if (loca && heatmap) loca.remove(heatmap) - if (tab == 'person') { - var geo = new Loca.GeoJSONSource({ - data: heatmapData - }); - heatmap = new Loca.HeatMapLayer({ - // loca, - zIndex: 10, - opacity: 1, - visible: true, - zooms: [2, 22], - }); + //初始层级 zoom14以下显示聚合点 + const data = [ + { lng: 116.117906, lat: 28.678096, type: 'home', name: '廉租房1', kind: 'markergreen' }, + { lng: 116.195238, lat: 28.842114, type: 'home', name: '廉租房2', kind: 'markerblue' }, + { lng: 116.037227, lat: 28.558811, type: 'home', name: '廉租房3', kind: 'markeryellow' }, + { lng: 115.925856, lat: 28.558811, type: 'home', name: '廉租房4', kind: 'markergreen' }, + { lng: 115.989847, lat: 28.484411, type: 'home', name: '廉租房5', kind: 'markergreen' }, - heatmap.setSource(geo, { - radius: 20, - unit: 'px', - height: 10, - // radius: 10, - // unit: 'px', - // height: 10, - gradient: { - 0.1: 'rgba(50,48,118,1)', - 0.2: 'rgba(127,60,255,1)', - 0.4: 'rgba(166,53,219,1)', - 0.6: 'rgba(254,64,95,1)', - 0.8: 'rgba(255,98,4,1)', - 1: 'rgba(236,220,79,1)', - }, - value: function (index, feature) { - return feature.properties.count; - }, - min: 0, - max: 10, //4.6 - heightBezier: [0, .53, .37, .98], - }); - loca.add(heatmap); - - map.on('click', (e) => { - const feat = heatmap.queryFeature(e.pixel.toArray()); - const random = Math.random() - if (feat) { - let infowindow = new AMap.InfoWindow({ - isCustom: true, //使用自定义窗体 - content: `
-
`, - offset: new AMap.Pixel(133, 260) - }); - - let position = map.getCenter(); - infowindow.open(map, position); - setTimeout(() => { - if (document.getElementById(`contentidheatmap${random}`)) { - render(
-
{ - map.clearInfoWindow(); - }} /> -
- 小区名称 - 小区名称 -
-
- 人口 - 2344人 -
-
- 新生儿 - 23人 -
-
- 老人 - 342人 -
-
, - document.getElementById(`contentidheatmap${random}`)); - } - }, 50) + { lng: 116.054664, lat: 28.538966, type: 'device', name: '廉租房1', kind: 'markergreen' }, + { lng: 116.074711, lat: 28.746745, type: 'device', name: '廉租房2', kind: 'markerblue' }, + { lng: 116.111632, lat: 28.56532, type: 'device', name: '廉租房3', kind: 'markeryellow' }, + { lng: 115.978519, lat: 28.56532, type: 'device', name: '廉租房4', kind: 'markergreen' }, + { lng: 115.95792, lat: 28.417395, type: 'device', name: '廉租房5', kind: 'markergreen' }, + ] - } + //zoom14以上显示详情 + const databig = [ + { lng: 115.924246, lat: 28.554835, type: 'device', name: '廉租房1', kind: 'markergreenbig' }, + { lng: 115.921495, lat: 28.553053, type: 'device', name: '廉租房2', kind: 'markerbluebig' }, + { lng: 115.919115, lat: 28.557256, type: 'device', name: '廉租房3', kind: 'markeryellowbig' }, + ] + //初始点位显示 + data.filter(s => s.type == tab).map((x, index) => { + var marker = new AMap.Marker({ + position: new AMap.LngLat(x.lng, x.lat), + // 将一张图片的地址设置为 icon + icon: '/assets/images/homepage/communtity/' + x.kind + '.png', + // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点 + offset: new AMap.Pixel(-13, -30), + zooms: [3, 14], }); - } else { - //初始层级 zoom14以下显示聚合点 - const data = [ - { lng: 116.117906, lat: 28.678096, type: 'home', name: '廉租房1', kind: 'markergreen' }, - { lng: 116.195238, lat: 28.842114, type: 'home', name: '廉租房2', kind: 'markerblue' }, - { lng: 116.037227, lat: 28.558811, type: 'home', name: '廉租房3', kind: 'markeryellow' }, - { lng: 115.925856, lat: 28.558811, type: 'home', name: '廉租房4', kind: 'markergreen' }, - { lng: 115.989847, lat: 28.484411, type: 'home', name: '廉租房5', kind: 'markergreen' }, - - { lng: 116.054664, lat: 28.538966, type: 'device', name: '廉租房1', kind: 'markergreen' }, - { lng: 116.074711, lat: 28.746745, type: 'device', name: '廉租房2', kind: 'markerblue' }, - { lng: 116.111632, lat: 28.56532, type: 'device', name: '廉租房3', kind: 'markeryellow' }, - { lng: 115.978519, lat: 28.56532, type: 'device', name: '廉租房4', kind: 'markergreen' }, - { lng: 115.95792, lat: 28.417395, type: 'device', name: '廉租房5', kind: 'markergreen' }, - ] - - //zoom14以上显示详情 - const databig = [ - { lng: 115.924246, lat: 28.554835, type: 'device', name: '廉租房1', kind: 'markergreenbig' }, - { lng: 115.921495, lat: 28.553053, type: 'device', name: '廉租房2', kind: 'markerbluebig' }, - { lng: 115.919115, lat: 28.557256, type: 'device', name: '廉租房3', kind: 'markeryellowbig' }, - ] - //初始点位显示 - data.filter(s => s.type == tab).map((x, index) => { - var marker = new AMap.Marker({ - position: new AMap.LngLat(x.lng, x.lat), - // 将一张图片的地址设置为 icon - icon: '/assets/images/homepage/communtity/' + x.kind + '.png', - // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点 - offset: new AMap.Pixel(-13, -30), - zooms: [3, 14], - }); - marker.setTitle(x.name); - map.add(marker); - marker.on('click', () => { - map.setZoom(17.4) - map.setCenter([115.922069, 28.554867]) - map.setPitch(47.30) - map.setRotation(1.7000) - }) - }) - //下钻点位显示 - databig.map((x, index) => { - var marker = new AMap.Marker({ - position: new AMap.LngLat(x.lng, x.lat), - // 将一张图片的地址设置为 icon - icon: '/assets/images/homepage/communtity/' + x.kind + '.png', - // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点 - offset: new AMap.Pixel(-13, -30), - zooms: [15, 19], - }); - marker.setTitle(x.name); - map.add(marker); - - let infowindow = new AMap.InfoWindow({ - isCustom: true, //使用自定义窗体 - content: `
-
`, - offset: new AMap.Pixel(233, 260) - }); - - marker.on('click', () => { - let position = marker.getPosition ? marker.getPosition() : marker.getCenter(); - infowindow.open(map, position); - map.setCenter(position) - setTimeout(() => { - if (document.getElementById(`contentid${x.name}`)) { - render(
-
{ - map.setCenter([115.922069, 28.554867]) - map.clearInfoWindow(); - }} /> -
- 小区名称 - {x.name} -
-
- 人流量 - 123次 - 房龄 - 9年 -
-
- 租赁中房屋 - 165套 -
-
- 网格员 - 张三 -
-
- 手机号码 - 15765845845 -
-
, - document.getElementById(`contentid${x.name}`)); - } - }, 50) - }) + marker.setTitle(x.name); + map.add(marker); + marker.on('click', () => { + map.setZoom(17.4) + map.setCenter([115.922069, 28.554867]) + map.setPitch(47.30) + map.setRotation(1.7000) }) - - if (tab == 'device') { - const data = [ - { lng: 115.921895, lat: 28.556351, type: 'device', name: '廉租房1', kind: 'devicemarker' }, - { lng: 115.920839, lat: 28.555323, type: 'device', name: '廉租房2', kind: 'devicemarker' }, - { lng: 115.918329, lat: 28.55445, type: 'device', name: '廉租房3', kind: 'devicemarker' }, - { lng: 115.919309, lat: 28.553166, type: 'device', name: '廉租房1', kind: 'devicemarker' }, - { lng: 115.921585, lat: 28.553925, type: 'device', name: '廉租房2', kind: 'devicemarker' }, - { lng: 115.92565, lat: 28.556996, type: 'device', name: '廉租房3', kind: 'devicemarker' }, - { lng: 115.922671, lat: 28.558769, type: 'device', name: '廉租房1', kind: 'devicemarker' }, - ] - - data.filter(s => s.type == tab).map((x, index) => { - var marker = new AMap.Marker({ - position: new AMap.LngLat(x.lng, x.lat), - // 将一张图片的地址设置为 icon - icon: '/assets/images/homepage/communtity/' + x.kind + '.png', - // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点 - offset: new AMap.Pixel(-13, -30), - zooms: [15, 19], - }); - marker.setTitle(x.name); - map.add(marker); - }) - } - } - - } - - const renderAlarms = () => { - if (tab == 'person') { - return; - } - - const alarms = [ - { lng: 115.92365, lat: 28.557404, type: 'device', name: '廉租房1', kind: 'markeralarm' }, - ] - - alarms.map((x, index) => { + }) + //下钻点位显示 + databig.map((x, index) => { var marker = new AMap.Marker({ position: new AMap.LngLat(x.lng, x.lat), // 将一张图片的地址设置为 icon @@ -317,24 +155,17 @@ function Map(props) { let infowindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 - content: `
-
`, + content: `
+
`, offset: new AMap.Pixel(233, 260) }); - let alarmOk = new AMap.InfoWindow({ - isCustom: true, //使用自定义窗体 - // content: `
- //
`, - offset: new AMap.Pixel(233, 440) - }); - marker.on('click', () => { let position = marker.getPosition ? marker.getPosition() : marker.getCenter(); infowindow.open(map, position); map.setCenter(position) setTimeout(() => { - if (document.getElementById(`alarmcontentid${x.name}`)) { + if (document.getElementById(`contentid${x.name}`)) { render(
{ map.setCenter([115.922069, 28.554867]) @@ -362,18 +193,115 @@ function Map(props) { 手机号码 15765845845
- -
人流量较大,确认是否安装消防设施?
-
-
-
-
, - document.getElementById(`alarmcontentid${x.name}`)); + document.getElementById(`contentid${x.name}`)); } }, 50) }) }) + + } + + const renderDevices = () => { + map.clearMap() + var style = [{ + url: '/assets/images/homepage/communtity/gishydrant.png', + anchor: new AMap.Pixel(6, 6), + size: new AMap.Size(11, 11) + }, { + url: '/assets/images/homepage/communtity/giswatertank.png', + anchor: new AMap.Pixel(4, 4), + size: new AMap.Size(11, 11) + }, { + url: '/assets/images/homepage/communtity/gissmoke.png', + anchor: new AMap.Pixel(3, 3), + size: new AMap.Size(11, 11) + }, { + url: '/assets/images/homepage/communtity/giselectricity.png', + anchor: new AMap.Pixel(3, 3), + size: new AMap.Size(11, 11) + }]; + let points = [], markers = []; + devices?.filter(x => x.type == type)?.map(x => { + let data = JSON.parse(x.data) + data?.map((s, index) => { + points.push( + { + lnglat: new AMap.LngLat(s.lng, s.lat), + style: x.type - 1,//对应的status相对应的样式style + name: s.address, + id: s.address + s.type + index, + data: s, + } + ); + // if (index < 2000 && s.lng && s.lat) { + // const marker = new AMap.Marker({ + // icon: '/assets/images/homepage/fire/leader.png', + // // icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png", + // position: [s.lng, s.lat], + // // offset: new AMap.Pixel(-13, -30), + // // content: '' + // // size: [13, 13] + // }); + // marker.setTitle(index); + // marker.setMap(map); + // } + + }); + }) + + var mass = new AMap.MassMarks(points, { + opacity: 0.8, + zIndex: 11111111, + cursor: 'pointer', + style: style + }); + + mass.on('click', function (e) { + let id = Math.random(1000) + map.setCenter(e.data.lnglat) + let infowindow = new AMap.InfoWindow({ + isCustom: true, //使用自定义窗体 + content: `
+
`, + offset: new AMap.Pixel(181, 260) + }); + infowindow.open(map, e.data.lnglat) + + setTimeout(() => { + if (document.getElementById('info-window' + id)) { + render( +
+
{ map.clearInfoWindow() }} /> +
+
+
+
{TYPES[type]}
+
+
+
地址
+ + {e.data.name?.length > 20 ? e.data.name?.substring(0, 20) + '...' : e.data.name} + +
+
+
+
状态
正常
+
+
+
+ + , + document.getElementById('info-window' + id)); + } + }, 50) + + window.closeTooltip = () => { + testDiv.close(); + } + }) + + mass.setMap(map) } const renderLeftTop = () => { @@ -405,24 +333,19 @@ function Map(props) { } const renderRightBottom = () => { - return tab == 'person' ? -
-
-
特殊人群
- -
- 新生儿热力图 - 单位:人/平方公里 -
- -
-
- 0 - 10 - 20 - 30 - 40 -
+ // | type | 设备类型 | 1-获取消防栓 2-水箱 3-烟感 4-配电箱 + return tab == 'device' ? +
+ {[ + { name: '烟感设备', icon: 'gissmoke', type: 3 }, + { name: '配电箱', icon: 'giselectricity', type: 4 }, + { name: '消火栓', icon: 'gishydrant', type: 1 }, + { name: '水箱', icon: 'giswatertank', type: 2 } + ].map(s =>
+
{ setType(s.type) }} className={`checkbox`} >{s.type == type ? '✓' : ''}
+ + {s.name} +
)}
:
@@ -440,6 +363,7 @@ function Map(props) {
} + return ( <> {/* 延缓加载遮罩 */} @@ -447,17 +371,21 @@ function Map(props) { {/* 地图容器 */}
- {map && renderMarkers()} - {map && renderAlarms()} + {/* 底部按钮 */} - {!delay && [ + {[ { name: '房屋分布', tab: 'home' }, { name: '人口分布', tab: 'person' }, { name: '基础设施', tab: 'device' } ].map((s, index) => { - return
{ setTab(s.tab) }} + + return index == 1 ? '' :
{ + if (delay) return + setTab(s.tab) + }} + style={{ zIndex: 1001 }} >
{s.name}
diff --git a/super-screen/client/src/sections/community-safty/containers/gis.less b/super-screen/client/src/sections/community-safty/containers/gis.less index 9903780..d667a8b 100644 --- a/super-screen/client/src/sections/community-safty/containers/gis.less +++ b/super-screen/client/src/sections/community-safty/containers/gis.less @@ -28,7 +28,7 @@ .gis-bottom { position: absolute; left: 0; - bottom: 0; + bottom: -1px; height: 10%; width: 100%; background: linear-gradient(180deg, rgba(0, 19, 46, 0) 0%, #000000 100%); @@ -37,7 +37,7 @@ .gis-button1 { position: absolute; left: 39%; - bottom: -5%; + bottom: -2%; font-family: YouSheBiaoTiHei; font-size: 12px; color: #ECF7FF; @@ -91,7 +91,7 @@ .gis-button3 { position: absolute; left: 57%; - bottom: -5%; + bottom: -2%; font-family: YouSheBiaoTiHei; font-size: 12px; color: #ECF7FF; @@ -458,64 +458,47 @@ } } -.person_home_right { +.device_home_right { position: absolute; right: 26%; bottom: 7%; z-index: 999; - width: 224px; - height: 96px; - background-image: linear-gradient(270deg, rgba(4, 55, 126, 0.65) 0%, rgba(0, 18, 65, 0.69) 50%, rgba(0, 18, 65, 0.65) 96%); + width: 106px; + height: 126px; + background: rgba(2, 29, 51, 0.68); padding-left: 5px; + border: 1px solid #1e5899; + display: flex; + flex-direction: column; + justify-content: center; + padding-top: 8px; - ._right_row1 { - width: 100%; - display: flex; - align-items: center; - padding-right: 22px; - justify-content: flex-end; - - .monitor_text { - background: linear-gradient(180deg, #FFFFFF, rgba(17, 124, 213, 1)); - background-clip: border-box; - -webkit-background-clip: text; - color: transparent; - font-family: YouSheBiaoTiHei; - font-size: 16px; - letter-spacing: 0; - } - - ._monitor { - width: 7.39px; - height: 6px; - background: url('/assets/images/homepage/communtity/monitor.png') no-repeat; - background-size: 100% 100%; - margin-right: 13px; - } - } - - .legend_color { - width: 210.77px; - height: 3px; - background-image: linear-gradient(90deg, #A1FF00 1%, #FFF800 23%, #EF8C00 74%, #FF0000 100%); + img { + width: 13px; + height: 13px; + margin-right: 3px; } - ._title_1 { - background: linear-gradient(180deg, #FFFFFF, rgba(17, 124, 213, 1)); - background-clip: border-box; - -webkit-background-clip: text; - color: transparent; + span { font-family: YouSheBiaoTiHei; - font-size: 16px; + font-size: 14px; + color: #FFFFFF; } - ._title_2 { - font-family: SourceHanSansCN-Medium; - font-weight: 500; - font-size: 12px; - color: #93ABC0; + .checkbox { + width: 12px; + height: 12px; + background: url(/assets/images/homepage/communtity/checkbox.png) no-repeat; + background-size: 100% 100%; + cursor: pointer; + margin-right: 4px; + display: inline-block; + color: #b4d2ed; + display: flex; + justify-content: center; + align-items: center; + font-size: 11px; } - } @@ -537,4 +520,69 @@ width: 753px; height: 753px; } +} + +.markerClass { + + width: 12px; + height: 12px; + + background-color: #dd524d; + border-radius: 6px; + opacity: 0.7; +} + +.device-infowindow { + width: 302px; + height: 338.43px; + background: url('/assets/images/homepage/communtity/deviceinfowindow.png') no-repeat; + background-size: 100% 100%; + opacity: 0.8; + padding-left: 69px; + padding-left: 22px; + padding-top: 157px; + color: #fff; + + .gis_exit { + cursor: pointer; + position: absolute; + right: 9px; + top: 42px; + width: 30.75px; + height: 23px; + background: url('/assets/images/homepage/communtity/exit.png') no-repeat; + background-size: 100% 100%; + } + + .gis_item { + border-bottom: 1px solid #125DB0; + width: 93%; + display: flex; + align-items: center; + padding-left: 20px; + margin-bottom: 10px; + min-height: 35px; + display: flex; + + .gis_title { + font-family: SourceHanSansCN-Regular; + font-weight: 400; + font-size: 14px; + color: #C3E6FF; + letter-spacing: 0; + margin-right: 12px; + width: 65px; + } + + .gis_text { + width: 188px; + font-family: SourceHanSansCN-Regular; + font-weight: 400; + font-size: 14px; + color: #FFFFFF; + letter-spacing: 0; + line-height: 21px; + } + } + } \ No newline at end of file diff --git a/super-screen/client/src/sections/community-safty/containers/homePage.js b/super-screen/client/src/sections/community-safty/containers/homePage.js index 2783d46..25bb03f 100644 --- a/super-screen/client/src/sections/community-safty/containers/homePage.js +++ b/super-screen/client/src/sections/community-safty/containers/homePage.js @@ -3,10 +3,10 @@ import { connect } from 'react-redux'; import { push } from 'react-router-redux'; import LeftTop from '../components/basic-info' import LeftMiddle from '../components/population-dynamics' -import LeftBottom from '../components/infrastructure' -import RightTop from '../components/city-safty' +import RightTop from '../components/infrastructure' +import RightBottom from '../components/city-safty' import RightMiddle from '../components/special-person' -import RightBottom from '../components/traffic-ranking' +import LeftBottom from '../components/traffic-ranking' import Gis from './gis'; import Weather from '../../water-prevention/components/weather'; import { FullScreenContainer } from '$components' @@ -42,8 +42,13 @@ function homePage(props) {
-
- +
+ {/* */} +
房屋分布
+
基础设施
+