diff --git a/super-screen/client/assets/images/homepage/fire/alarm1.png b/super-screen/client/assets/images/homepage/fire/alarm1.png new file mode 100644 index 0000000..863c973 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/alarm1.png differ diff --git a/super-screen/client/assets/images/homepage/fire/alarm2.png b/super-screen/client/assets/images/homepage/fire/alarm2.png new file mode 100644 index 0000000..7b322d8 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/alarm2.png differ diff --git a/super-screen/client/assets/images/homepage/fire/alarmbg.png b/super-screen/client/assets/images/homepage/fire/alarmbg.png new file mode 100644 index 0000000..3c3ebfc Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/alarmbg.png differ diff --git a/super-screen/client/assets/images/homepage/fire/alarmtime.png b/super-screen/client/assets/images/homepage/fire/alarmtime.png new file mode 100644 index 0000000..f37fabb Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/alarmtime.png differ diff --git a/super-screen/client/assets/images/homepage/fire/bg3.png b/super-screen/client/assets/images/homepage/fire/bg3.png new file mode 100644 index 0000000..6ef3859 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/bg3.png differ diff --git a/super-screen/client/assets/images/homepage/fire/iconhome.png b/super-screen/client/assets/images/homepage/fire/iconhome.png new file mode 100644 index 0000000..216658c Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/iconhome.png differ diff --git a/super-screen/client/assets/images/homepage/fire/lefticon1.png b/super-screen/client/assets/images/homepage/fire/lefticon1.png new file mode 100644 index 0000000..a422e1e Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/lefticon1.png differ diff --git a/super-screen/client/assets/images/homepage/fire/lefticon2.png b/super-screen/client/assets/images/homepage/fire/lefticon2.png new file mode 100644 index 0000000..e287d8a Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/lefticon2.png differ diff --git a/super-screen/client/assets/images/homepage/fire/lefticon3.png b/super-screen/client/assets/images/homepage/fire/lefticon3.png new file mode 100644 index 0000000..9324872 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/lefticon3.png differ diff --git a/super-screen/client/assets/images/homepage/fire/lefticon4.png b/super-screen/client/assets/images/homepage/fire/lefticon4.png new file mode 100644 index 0000000..256dfa2 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/lefticon4.png differ diff --git a/super-screen/client/assets/images/homepage/fire/position.png b/super-screen/client/assets/images/homepage/fire/position.png new file mode 100644 index 0000000..9ddaa9c Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/position.png differ diff --git a/super-screen/client/assets/images/homepage/fire/rightbgbig.png b/super-screen/client/assets/images/homepage/fire/rightbgbig.png new file mode 100644 index 0000000..f14cb46 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/rightbgbig.png differ diff --git a/super-screen/client/assets/images/homepage/fire/rightbgsmall.png b/super-screen/client/assets/images/homepage/fire/rightbgsmall.png new file mode 100644 index 0000000..e697092 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/rightbgsmall.png differ diff --git a/super-screen/client/assets/images/homepage/fire/secondbg.png b/super-screen/client/assets/images/homepage/fire/secondbg.png new file mode 100644 index 0000000..acd1222 Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/secondbg.png differ diff --git a/super-screen/client/assets/images/homepage/fire/triangle1.png b/super-screen/client/assets/images/homepage/fire/triangle1.png new file mode 100644 index 0000000..e7581ba Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/triangle1.png differ diff --git a/super-screen/client/assets/images/homepage/fire/triangle2.png b/super-screen/client/assets/images/homepage/fire/triangle2.png new file mode 100644 index 0000000..16e53dd Binary files /dev/null and b/super-screen/client/assets/images/homepage/fire/triangle2.png differ diff --git a/super-screen/client/assets/images/homepage/water/down.png b/super-screen/client/assets/images/homepage/water/down.png new file mode 100644 index 0000000..8c8e2fa Binary files /dev/null and b/super-screen/client/assets/images/homepage/water/down.png differ diff --git a/super-screen/client/assets/images/homepage/water/normal.png b/super-screen/client/assets/images/homepage/water/normal.png new file mode 100644 index 0000000..34103bf Binary files /dev/null and b/super-screen/client/assets/images/homepage/water/normal.png differ diff --git a/super-screen/client/assets/images/homepage/water/up.png b/super-screen/client/assets/images/homepage/water/up.png new file mode 100644 index 0000000..05b957a Binary files /dev/null and b/super-screen/client/assets/images/homepage/water/up.png differ diff --git a/super-screen/client/assets/images/homepage/water/warning.png b/super-screen/client/assets/images/homepage/water/warning.png new file mode 100644 index 0000000..d5c7778 Binary files /dev/null and b/super-screen/client/assets/images/homepage/water/warning.png differ diff --git a/super-screen/client/assets/images/map1.svg b/super-screen/client/assets/images/map1.svg new file mode 100644 index 0000000..a49137e --- /dev/null +++ b/super-screen/client/assets/images/map1.svg @@ -0,0 +1,116 @@ + + + 南昌县 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/super-screen/client/assets/images/ring_bg.png b/super-screen/client/assets/images/ring_bg.png new file mode 100644 index 0000000..b52f88d Binary files /dev/null and b/super-screen/client/assets/images/ring_bg.png differ diff --git a/super-screen/client/assets/images/ring_chart_bg.png b/super-screen/client/assets/images/ring_chart_bg.png new file mode 100644 index 0000000..6afba9e Binary files /dev/null and b/super-screen/client/assets/images/ring_chart_bg.png differ diff --git a/super-screen/client/src/components/index.js b/super-screen/client/src/components/index.js index 80d0a3e..76ac664 100644 --- a/super-screen/client/src/components/index.js +++ b/super-screen/client/src/components/index.js @@ -7,12 +7,17 @@ import NoResource from './no-resource'; import ExportAndImport from './export'; import ButtonGroup from './buttonGroup'; import UploadLocal from './UploadLocal'; - +import Box from './public/table-card'; +import CarouselList from './public/carousel-list'; +import NoData from './public/noData' export { Upload, Uploads, NoResource, ExportAndImport, ButtonGroup, - UploadLocal + UploadLocal, + Box, + CarouselList, + NoData }; diff --git a/super-screen/client/src/components/public/carousel-list.js b/super-screen/client/src/components/public/carousel-list.js new file mode 100644 index 0000000..8aaf397 --- /dev/null +++ b/super-screen/client/src/components/public/carousel-list.js @@ -0,0 +1,33 @@ +/* 轮播列表组件 */ +import React from 'react'; +import ScrollBoard from './scrollBoard'; +import NoData from './noData'; +import './index.less'; +function CarouselList(props) { + const { + header = [], data = [], rowNum = 4, height, columnWidth, multiellipsis, waitTime = 2000, marginTop, ...restProps + } = props; + + const config = { + header, + rowNum, + headerBGC: 'rgba(81, 200, 247, 0.2)', + oddRowBGC: 'transparent', + evenRowBGC: 'transparent', + headerHeight: 30, + data, + waitTime, + columnWidth: columnWidth || [], + }; + + return data.length > 0 ? ( + + ) : ; +} + +export default CarouselList; diff --git a/super-screen/client/src/components/public/index.less b/super-screen/client/src/components/public/index.less new file mode 100644 index 0000000..dbc079e --- /dev/null +++ b/super-screen/client/src/components/public/index.less @@ -0,0 +1,108 @@ +.opcityBackground { + background-color: rgba(8, 27, 55, 0.6); +} + +.card-title { + height: 31px; + font-family: YouSheBiaoTiHei; + font-size: 24px; + color: #FFFFFF; + letter-spacing: 2px; + padding-left: 15px; +} + +/* 滚动列表 */ +.scroll-board { + width: 533px; + height: 220px; + margin-top: 10px; + margin-left: 6px; + + .header { + height: 30px; + border-top: 1px solid #0047ba; + border-bottom: 1px solid #0047ba; + + .header-item { + // background: rgba(12, 49, 110, 0.3); + margin-right: 10px; + } + } + + .rows { + .row-item { + font-size: 16px; + } + + .row-item:hover { + background: linear-gradient(270deg, rgba(17, 183, 247, 0) 0%, rgba(17, 183, 247, 0.85) 100%); + color: #9ac8fc; + } + } +} + +.scroll-board-multi { + padding: 5px 0px 5px; + color: rgba(204, 228, 255, 1) !important; + + .header { + display: flex; + flex-direction: row; + font-size: 12px !important; + color: rgba(204, 228, 255, 1) !important; + // border-bottom: 1px solid #124C79 !important; + } + + .rows { + color: rgba(204, 228, 255, 1) !important; + + .row-item { + border-bottom: 1px solid #124C79 !important; + } + + .row-item:hover { + background: linear-gradient(270deg, rgba(17, 183, 247, 0) 0%, rgba(17, 183, 247, 0.85) 100%); + color: #9ac8fc; + } + } +} + +._sorrow { + display: inline-block; + width: 15px; + height: 15px; + background: url('/assets/images/homePage/bigscreen/sorrow.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + margin-left: 13px; +} + +.subtitle_ { + float: right; + margin-top: 12px; + margin-right: 20px; + width: 200px; + text-align: center; + + ._item_select { + width: 60px; + height: 20px; + display: inline-block; + font-size: 14px; + color: #24DCF7; + border: 1px solid #12B2E5; + background-color: rgba(91, 193, 255, 0.2); + margin-right: 3px; + } + + ._item { + width: 60px; + height: 20px; + display: inline-block; + font-size: 14px; + color: #4C9FFF; + border: 1px solid #0B6AEA; + background-color: rgba(35, 108, 254, 0.3); + margin-right: 3px; + } +} \ No newline at end of file diff --git a/super-screen/client/src/components/public/noData.js b/super-screen/client/src/components/public/noData.js new file mode 100644 index 0000000..9d5bb13 --- /dev/null +++ b/super-screen/client/src/components/public/noData.js @@ -0,0 +1,18 @@ +/* 公共模块暂无数据组件 */ +import React from 'react'; +import { Empty } from 'antd'; + +function NoData({ height = 180, marginTop = 0 }) { + return ( + + ); +} + +export default NoData; diff --git a/super-screen/client/src/components/public/scrollBoard/index.js b/super-screen/client/src/components/public/scrollBoard/index.js new file mode 100644 index 0000000..fbddde3 --- /dev/null +++ b/super-screen/client/src/components/public/scrollBoard/index.js @@ -0,0 +1,469 @@ +import React, { + useEffect, useState, useRef, useMemo, forwardRef, +} from 'react'; + +import PropTypes from 'prop-types'; + +import classnames from 'classnames'; + +import { deepMerge } from '@jiaminghi/charts/lib/util/index'; + +import { deepClone } from '@jiaminghi/c-render/lib/plugin/util'; + +import { useAutoResize, co } from '@jiaminghi/data-view-react'; + +import './style.less'; + +const defaultConfig = { + /** + * @description Board header + * @type {Array} + * @default header = [] + * @example header = ['column1', 'column2', 'column3'] + */ + header: [], + /** + * @description Board data + * @type {Array} + * @default data = [] + */ + data: [], + /** + * @description Row num + * @type {Number} + * @default rowNum = 5 + */ + rowNum: 5, + /** + * @description Header background color + * @type {String} + * @default headerBGC = '#00BAFF' + */ + headerBGC: '#00BAFF', + /** + * @description Odd row background color + * @type {String} + * @default oddRowBGC = '#003B51' + */ + oddRowBGC: '#003B51', + /** + * @description Even row background color + * @type {String} + * @default evenRowBGC = '#003B51' + */ + evenRowBGC: '#0A2732', + /** + * @description Scroll wait time + * @type {Number} + * @default waitTime = 2000 + */ + waitTime: 2000, + /** + * @description Header height + * @type {Number} + * @default headerHeight = 35 + */ + headerHeight: 35, + /** + * @description Column width + * @type {Array} + * @default columnWidth = [] + */ + columnWidth: [], + /** + * @description Column align + * @type {Array} + * @default align = [] + * @example align = ['left', 'center', 'right'] + */ + align: [], + /** + * @description Show index + * @type {Boolean} + * @default index = false + */ + index: false, + /** + * @description index Header + * @type {String} + * @default indexHeader = '#' + */ + indexHeader: '#', + /** + * @description Carousel type + * @type {String} + * @default carousel = 'single' + * @example carousel = 'single' | 'page' + */ + carousel: 'single', + /** + * @description Pause scroll when mouse hovered + * @type {Boolean} + * @default hoverPause = true + * @example hoverPause = true | false + */ + hoverPause: true, +}; + +function calcHeaderData({ header, index, indexHeader }) { + if (!header.length) { + return []; + } + + header = [...header]; + + if (index) header.unshift(indexHeader); + + return header; +} + +function calcRows({ + data, index, headerBGC, rowNum, +}) { + if (index) { + data = data.map((row, i) => { + row = [...row]; + + const indexTag = `${i + + 1}`; + + row.unshift(indexTag); + + return row; + }); + } + + data = data.map((ceils, i) => ({ ceils, rowIndex: i })); + + const rowLength = data.length; + + if (rowLength > rowNum && rowLength < 2 * rowNum) { + data = [...data, ...data]; + } + + return data.map((d, i) => ({ ...d, scroll: i })); +} + +function calcAligns(mergedConfig, header) { + const columnNum = header.length; + + const aligns = new Array(columnNum).fill('left'); + + const { align } = mergedConfig; + + return deepMerge(aligns, align); +} + +const ScrollBoard = forwardRef(({ + onClick, config = {}, className, style, onMouseOver, +}, ref) => { + const { width, height, domRef } = useAutoResize(ref); + + const [state, setState] = useState({ + mergedConfig: null, + + header: [], + + rows: [], + + rowsShow: [], + + widths: [], + + heights: [], + + aligns: [], + }); + + const { + mergedConfig, header, rows, widths, heights, aligns, rowsShow, + } = state; + + const stateRef = useRef({ + ...state, + rowsData: [], + avgHeight: 0, + animationIndex: 0, + }); + + Object.assign(stateRef.current, state); + + function onResize() { + if (!mergedConfig) return; + + const widths = calcWidths(mergedConfig, stateRef.current.rowsData); + + const heights = calcHeights(mergedConfig, header); + + const data = { widths, heights }; + + Object.assign(stateRef.current, data); + setState((state) => ({ ...state, ...data })); + } + const [init, setInit] = useState(true); + + function calcData() { + // const mergedConfig = deepMerge( + // deepClone(defaultConfig, true), + // config || {}, + // ); + const mergedConfig = { + ...defaultConfig, + ...config, + }; + + const header = calcHeaderData(mergedConfig); + + const rows = calcRows(mergedConfig); + + const widths = calcWidths(mergedConfig, stateRef.current.rowsData); + + const heights = calcHeights(mergedConfig, header); + + const aligns = calcAligns(mergedConfig, header); + + const data = { + mergedConfig, + header, + rows, + widths, + aligns, + heights: init ? heights : state.heights.concat(heights), + rowsShow: init ? rows : state.rowsShow, + }; + setInit(false); + Object.assign(stateRef.current, data, { + rowsData: rows, + animationIndex: stateRef.current.animationIndex, + }); + + setState((state) => ({ ...state, ...data })); + } + + function calcWidths({ columnWidth, header }, rowsData) { + const usedWidth = columnWidth.reduce((all, w) => all + w, 0); + + let columnNum = 0; + if (rowsData[0]) { + columnNum = rowsData[0].ceils.length; + } else if (header.length) { + columnNum = header.length; + } + + const avgWidth = (width - usedWidth) / (columnNum - columnWidth.length); + + const widths = new Array(columnNum).fill(avgWidth); + + return deepMerge(widths, columnWidth); + } + + function calcHeights({ headerHeight, rowNum, data }, header) { + let allHeight = height; + + if (header.length) allHeight -= headerHeight; + + const avgHeight = allHeight / rowNum; + + Object.assign(stateRef.current, { avgHeight }); + + return new Array(data.length).fill(avgHeight); + } + + function* animation(start = false) { + let { + avgHeight, + animationIndex, + mergedConfig: { waitTime, carousel, rowNum }, + rowsData, + } = stateRef.current; + + const rowLength = rowsData.length; + + if (start) yield new Promise((resolve) => setTimeout(resolve, waitTime)); + + const animationNum = carousel === 'single' ? 1 : rowNum; + + let rows = rowsData.slice(animationIndex); + rows.push(...rowsData.slice(0, animationIndex)); + rows = rows.slice(0, carousel === 'page' ? rowNum * 2 : rowNum + 1); + + const heights = new Array(rowLength).fill(avgHeight); + setState((state) => ({ + ...state, rows, heights, rowsShow: rows, + })); + + yield new Promise((resolve) => setTimeout(resolve, 300)); + + animationIndex += animationNum; + + const back = animationIndex - rowLength; + if (back >= 0) animationIndex = back; + + const newHeights = [...heights]; + newHeights.splice(0, animationNum, ...new Array(animationNum).fill(0)); + + Object.assign(stateRef.current, { animationIndex }); + setState((state) => ({ ...state, heights: newHeights })); + } + + function emitEvent(handle, ri, ci, row, ceil) { + const { ceils, rowIndex } = row; + + handle && handle({ + row: ceils, ceil, rowIndex, columnIndex: ci, + }); + } + + function handleHover(enter, ri, ci, row, ceil) { + if (enter) emitEvent(onMouseOver, ri, ci, row, ceil); + + if (!mergedConfig.hoverPause) return; + + const { pause, resume } = task.current; + + enter && pause && resume ? pause() : resume && resume(); + } + + // updateRows(rows, animationIndex) { + // const { mergedConfig, animationHandler, animation } = this + // this.mergedConfig = { + // ...mergedConfig, + // data: [...rows] + // } + // this.needCalc = true + // if (typeof animationIndex === 'number') this.animationIndex = animationIndex + // if (!animationHandler) animation(true) + // } + + const getBackgroundColor = (rowIndex) => mergedConfig[rowIndex % 2 === 0 ? 'evenRowBGC' : 'oddRowBGC']; + + const task = useRef({}); + + useEffect(() => { + calcData(); + + let start = true; + + function* loop() { + while (true) { + yield* animation(start); + + start = false; + + const { waitTime } = stateRef.current.mergedConfig; + + yield new Promise((resolve) => setTimeout(resolve, waitTime - 300)); + } + } + + const { + mergedConfig: { rowNum }, + rows: rowsData, + } = stateRef.current; + + const rowLength = rowsData.length; + + if (rowNum >= rowLength) { + setState((prestate) => ({ + ...prestate, rowsShow: state.rows, + })); + return; + } + + task.current = co(loop); + + return task.current.end; + }, [config, domRef.current]); + + useEffect(onResize, [width, height, domRef.current]); + + const classNames = useMemo(() => classnames('dv-scroll-board', className), [ + className, + ]); + + return ( +
+ {!!header.length && !!mergedConfig && ( +
+ {header.map((headerItem, i) => ( +
+ ))} +
+ )} + + {!!mergedConfig && ( +
+ {rowsShow.map((row, ri) => ( +
+ {row.ceils.map((ceil, ci) => { + if (typeof (ceil) === 'string') { + return ( +
emitEvent(onClick, ri, ci, row, ceil)} + onMouseEnter={() => handleHover(true, ri, ci, row, ceil)} + onMouseLeave={() => handleHover(false)} + /> + ); + } + return ( +
handleHover(true, ri, ci, row, ceil)} + onMouseLeave={() => handleHover(false)} + > + {ceil} +
+ ); + })} +
+ ))} +
+ )} +
+ ); +}); + +ScrollBoard.propTypes = { + config: PropTypes.object, + onClick: PropTypes.func, + onMouseOver: PropTypes.func, + className: PropTypes.string, + style: PropTypes.object, +}; + +export default ScrollBoard; diff --git a/super-screen/client/src/components/public/scrollBoard/style.less b/super-screen/client/src/components/public/scrollBoard/style.less new file mode 100644 index 0000000..cb6eea5 --- /dev/null +++ b/super-screen/client/src/components/public/scrollBoard/style.less @@ -0,0 +1,44 @@ +.dv-scroll-board { + position: relative; + width: 100%; + height: 100%; + color: #fff; + + .text { + padding: 0 10px; + box-sizing: border-box; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .header { + display: flex; + flex-direction: row; + font-size: 15px; + + .header-item { + .text; + transition: all 0.3s; + } + } + + .rows { + overflow: hidden; + + .row-item { + display: flex; + font-size: 14px; + transition: all 0.3s; + } + + .ceil { + .text; + } + + .index { + border-radius: 3px; + padding: 0px 3px; + } + } +} \ No newline at end of file diff --git a/super-screen/client/src/components/public/table-card.js b/super-screen/client/src/components/public/table-card.js new file mode 100644 index 0000000..d538efd --- /dev/null +++ b/super-screen/client/src/components/public/table-card.js @@ -0,0 +1,45 @@ +'use strict' + +import React from 'react' +import './index.less' +class Box extends React.Component { + render() { + const { title, height = '100%', children, margin, overflow, subtitle, subtitleSelect } = this.props + + const headerbg = { + background: 'url(/assets/images/homePage/bigscreen/headertitlebg.png) no-repeat', + backgroundSize: '100% 100%', + } + return ( +
+
+
+ {title} + + {subtitle &&
+
本周
+
本月
+
本年
+
} + + {subtitleSelect &&
+ {subtitleSelect} +
} +
+
+ {children} +
+ +
+
+ ) + } +} +export default Box + diff --git a/super-screen/client/src/sections/community-safty/components/basic-info.js b/super-screen/client/src/sections/community-safty/components/basic-info.js index e93a907..d185e56 100644 --- a/super-screen/client/src/sections/community-safty/components/basic-info.js +++ b/super-screen/client/src/sections/community-safty/components/basic-info.js @@ -1,5 +1,5 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; function BasicInfo() { diff --git a/super-screen/client/src/sections/community-safty/components/city-safty.js b/super-screen/client/src/sections/community-safty/components/city-safty.js index df8860b..f481368 100644 --- a/super-screen/client/src/sections/community-safty/components/city-safty.js +++ b/super-screen/client/src/sections/community-safty/components/city-safty.js @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import './style.less'; function CitySafty(props) { diff --git a/super-screen/client/src/sections/community-safty/components/infrastructure.js b/super-screen/client/src/sections/community-safty/components/infrastructure.js index 518bd98..0f3ff0b 100644 --- a/super-screen/client/src/sections/community-safty/components/infrastructure.js +++ b/super-screen/client/src/sections/community-safty/components/infrastructure.js @@ -1,5 +1,5 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; function Infrastructure(props) { diff --git a/super-screen/client/src/sections/community-safty/components/population-dynamics.js b/super-screen/client/src/sections/community-safty/components/population-dynamics.js index df5af18..ac17319 100644 --- a/super-screen/client/src/sections/community-safty/components/population-dynamics.js +++ b/super-screen/client/src/sections/community-safty/components/population-dynamics.js @@ -1,5 +1,5 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; function PopulationDynamics() { diff --git a/super-screen/client/src/sections/community-safty/components/special-person.js b/super-screen/client/src/sections/community-safty/components/special-person.js index f61e042..bcdf793 100644 --- a/super-screen/client/src/sections/community-safty/components/special-person.js +++ b/super-screen/client/src/sections/community-safty/components/special-person.js @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import './style.less'; function SpecialPerson(props) { diff --git a/super-screen/client/src/sections/community-safty/components/style.less b/super-screen/client/src/sections/community-safty/components/style.less index 8f6115f..6d536df 100644 --- a/super-screen/client/src/sections/community-safty/components/style.less +++ b/super-screen/client/src/sections/community-safty/components/style.less @@ -136,7 +136,7 @@ ._person_tends_item2 { width: calc(100% - 123.5px); padding-left: 21px; - padding-top: 30px; + padding-top: 22px; ._person_text { margin-bottom: 10%; @@ -289,8 +289,6 @@ //小区人流量排名 ._traffic_ranking { height: 100%; - overflow: auto; - ._rank_title { height: 34.64px; @@ -319,7 +317,13 @@ } } + .rank_content_overflow { + height: calc(100% - 35px); + overflow: auto; + } + ._rank_content { + margin-top: 12px; height: 34.64px; background: url('/assets/images/homePage/communtity/rankcontent.png'); background-repeat: no-repeat; @@ -375,7 +379,7 @@ } -._traffic_ranking::-webkit-scrollbar { +.rank_content_overflow::-webkit-scrollbar { width: 0 !important } diff --git a/super-screen/client/src/sections/community-safty/components/traffic-ranking.js b/super-screen/client/src/sections/community-safty/components/traffic-ranking.js index 83e6568..fe48c3d 100644 --- a/super-screen/client/src/sections/community-safty/components/traffic-ranking.js +++ b/super-screen/client/src/sections/community-safty/components/traffic-ranking.js @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import './style.less'; 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 76ccf29..955a333 100644 --- a/super-screen/client/src/sections/community-safty/containers/gis.js +++ b/super-screen/client/src/sections/community-safty/containers/gis.js @@ -424,7 +424,7 @@ function Map(props) { <> {/* 延缓加载遮罩 */} {delay &&
} diff --git a/super-screen/client/src/sections/fire-control/components/item-left.js b/super-screen/client/src/sections/fire-control/components/item-left.js index 3b86014..46b8ab2 100644 --- a/super-screen/client/src/sections/fire-control/components/item-left.js +++ b/super-screen/client/src/sections/fire-control/components/item-left.js @@ -1,13 +1,58 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import './style.less' function BasicInfo(props) { return
+
+ 22:02:45 +
{ props.endEvent() }}>结束案件
-
+
南昌县第一消防大队
+
+ +
+
+
+
+
+
+
案件名称案件时间
+
火灾扑救2023-06-16 12:30:30
+
+
+ +
+
+
+
+
+
案件名称案件时间
+
火灾扑救2023-06-16 12:30:30
+
+
+
+
+
+
+
+
案件名称案件时间
+
火灾扑救2023-06-16 12:30:30
+
+
+ +
+
+
+
+
+
案件名称案件时间
+
火灾扑救2023-06-16 12:30:30
+
+
+
} diff --git a/super-screen/client/src/sections/fire-control/components/item-right.js b/super-screen/client/src/sections/fire-control/components/item-right.js index 49b4474..8c285a8 100644 --- a/super-screen/client/src/sections/fire-control/components/item-right.js +++ b/super-screen/client/src/sections/fire-control/components/item-right.js @@ -1,10 +1,39 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; function BasicInfo() { return - dd +
+ { + [1, 2, 3, 4, 5, 6, 7].map((s, index) => { + return
+
+
+
+
场所名称
+
南昌县人民公园中心市场
+
+
+
场所地点
+
南昌县中心街道人民路168号 + 人民路168号人民路168号
+
+
+
承载人数
+
2000 人
+
+
+
目标距离
+
2.5 Km
+
+
+
场所{index + 1}
+
+ }) + } + +
} diff --git a/super-screen/client/src/sections/fire-control/components/left-bottom.js b/super-screen/client/src/sections/fire-control/components/left-bottom.js index 7c5387f..5d5bf0d 100644 --- a/super-screen/client/src/sections/fire-control/components/left-bottom.js +++ b/super-screen/client/src/sections/fire-control/components/left-bottom.js @@ -1,11 +1,32 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; function Infrastructure(props) { - return - + return +
+
+
14:22
+
红花岗区大队
+
划龙桥路77号
+
+
+
14:22
+
红花岗区大队
+
划龙桥路77号
+
+
+
14:22
+
红花岗区大队
+
划龙桥路77号
+
+
+
14:22
+
红花岗区大队
+
划龙桥路77号
+
+
} diff --git a/super-screen/client/src/sections/fire-control/components/left-middle.js b/super-screen/client/src/sections/fire-control/components/left-middle.js index 3fbdbd9..51bb895 100644 --- a/super-screen/client/src/sections/fire-control/components/left-middle.js +++ b/super-screen/client/src/sections/fire-control/components/left-middle.js @@ -1,5 +1,5 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import ReactEcharts from 'echarts-for-react'; function PopulationDynamics() { diff --git a/super-screen/client/src/sections/fire-control/components/left-top.js b/super-screen/client/src/sections/fire-control/components/left-top.js index eb7beb5..95250ff 100644 --- a/super-screen/client/src/sections/fire-control/components/left-top.js +++ b/super-screen/client/src/sections/fire-control/components/left-top.js @@ -1,5 +1,5 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; function BasicInfo() { diff --git a/super-screen/client/src/sections/fire-control/components/right-bottom.js b/super-screen/client/src/sections/fire-control/components/right-bottom.js index e73b7c4..e63c64b 100644 --- a/super-screen/client/src/sections/fire-control/components/right-bottom.js +++ b/super-screen/client/src/sections/fire-control/components/right-bottom.js @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import './style.less'; diff --git a/super-screen/client/src/sections/fire-control/components/right-middle.js b/super-screen/client/src/sections/fire-control/components/right-middle.js index b5cf89e..353a81a 100644 --- a/super-screen/client/src/sections/fire-control/components/right-middle.js +++ b/super-screen/client/src/sections/fire-control/components/right-middle.js @@ -1,15 +1,166 @@ -import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; -import './style.less'; +import React from 'react' +import { Box } from '$components'; +import ReactEcharts from 'echarts-for-react'; +import * as echarts from 'echarts'; +function PopulationDynamics() { -function SpecialPerson(props) { + let xaxisData = ["民用建筑", "工业建筑", "森林", "地下建筑", "水上"]; + let yaxisData = [150, 150, 150, 150, 150]; - - return - + const getSymbolData = (datas) => { + let arr = []; + for (var i = 0; i < datas.length; i++) { + arr.push({ + value: datas[i], + symbolPosition: "end", + }); + } + return arr; + }; + + let option = { + tooltip: { + trigger: "axis", + axisPointer: { + type: "shadow", + }, + backgroundColor: "rgba(255,255,255,0.75)", + extraCssText: "box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.3);", + textStyle: { + fontSize: 14, + color: "#000", + }, + formatter: (params) => { + const item = params[0]; + return item.name + " : " + item.value + " 条"; + }, + }, + legend: { + top: 10, + itemWidth: 20, + itemHeight: 10, + // icon: "roundRect", + left: "center", + padding: 0, + textStyle: { + color: "#E6E6E7", + fontSize: 14, + padding: [2, 0, 0, 0], + }, + }, + grid: { + left: 25, + right: 25, + top: 50, + bottom: 10, + containLabel: true, + }, + xAxis: [ + { + type: "category", + axisLabel: { + interval: 0, + color: "rgba(195, 230, 255, 1)", + fontSize: 12, + }, + axisLine: { + show: true, + lineStyle: { + type: 'solid', + //y轴网格线设置 + color: "rgba(184, 185, 188, 0.5)", + width: 1, + }, + }, + axisTick: { + show: false, + }, + data: xaxisData, + }, + ], + yAxis: [ + { + max: 225, + interval: 25, + type: "value", + + name: "单位:次", + nameGap: 30, + nameTextStyle: { + color: "rgba(195, 230, 255, 1)", + fontWeight: 400, + fontSize: 14, + padding: [-20, 20, 0, 0] + }, + axisTick: { + show: false, + }, + axisLine: { + show: false, + + }, + splitLine: { + show: true, + lineStyle: { + type: 'dashed', + color: 'rgba(89, 153, 200, 0.5)' + } + }, + axisLabel: { + show: true, + fontSize: 12, + color: "rgba(195, 230, 255, 1)", + }, + }, + ], + series: [ + { + type: "bar", + barWidth: 16, + label: { + show: false, + position: "top", + color: "#00A8FF", + + }, + itemStyle: { + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { + offset: 0, + color: "#00A8FF", + }, + { + offset: 1, + color: "rgba(0, 122, 255, 0)", + }, + ]), + }, + data: yaxisData, + }, + { + type: "pictorialBar", + symbol: "react", + symbolSize: [18, 8], + symbolOffset: [0, -5], + z: 12, + itemStyle: { + color: "#fff", + }, + data: getSymbolData(yaxisData), + }, + ], + }; + + return + } -export default SpecialPerson; +export default PopulationDynamics; diff --git a/super-screen/client/src/sections/fire-control/components/right-top.js b/super-screen/client/src/sections/fire-control/components/right-top.js index 509e603..e65f03d 100644 --- a/super-screen/client/src/sections/fire-control/components/right-top.js +++ b/super-screen/client/src/sections/fire-control/components/right-top.js @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import './style.less'; function CitySafty(props) { diff --git a/super-screen/client/src/sections/fire-control/components/style.less b/super-screen/client/src/sections/fire-control/components/style.less index e6d059e..e6551dd 100644 --- a/super-screen/client/src/sections/fire-control/components/style.less +++ b/super-screen/client/src/sections/fire-control/components/style.less @@ -2,7 +2,23 @@ display: flex; width: 100%; height: 100%; - justify-content: center; + text-align: center; + flex-direction: column; + align-items: center; + overflow: auto; + + .alarm_time { + width: 98%; + height: 225px; + background: url('/assets/images/homePage/fire/alarmtime.png') no-repeat; + background-size: 100% 100%; + display: flex; + justify-content: center; + align-items: center; + font-family: YouSheBiaoTiHei; + font-size: 48px; + color: #ECF7FF; + } .end_event { width: 202px; @@ -16,10 +32,174 @@ align-items: center; color: #ECF7FF; justify-content: center; + font-size: 18px; + } + + .event_title { + color: #fff; + font-size: 16px; + display: flex; + justify-content: space-around; + align-items: center; + width: 81%; + margin-top: 30px; + margin-bottom: 10px; + + .event_title_left { + width: 70px; + height: 2.37px; + background-image: linear-gradient(90deg, rgba(0, 102, 255, 0) 0%, #377EE8 97%); + } + + .event_title_right { + width: 70px; + height: 2.37px; + transform: scaleX(-1); + background-image: linear-gradient(90deg, rgba(0, 102, 255, 0) 0%, #377EE8 97%); + } + } + + .left_second_bg { + width: 95%; + height: 160px; + background: url('/assets/images/homePage/fire/secondbg.png') no-repeat; + background-size: 100% 100%; + + } + + .left_third_bg { + width: 95%; + height: 80px; + background: url('/assets/images/homePage/fire/bg3.png') no-repeat; + background-size: 100% 100%; + display: flex; + align-items: center; + justify-content: space-around; + margin-bottom: 20px; + + .left_item_left1 { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/lefticon1.png') no-repeat; + background-size: 100% 100%; + } + + .left_item_left2 { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/lefticon2.png') no-repeat; + background-size: 100% 100%; + } + + .left_item_left3 { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/lefticon3.png') no-repeat; + background-size: 100% 100%; + } + + .left_item_left4 { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/lefticon4.png') no-repeat; + background-size: 100% 100%; + } + + .left_item_right1 { + width: calc(100% - 70px); + color: rgba(236, 247, 255, 1); + } + } + +} + +.fire_item_right_container { + display: flex; + width: 100%; + height: 100%; + text-align: center; + flex-direction: column; + align-items: center; + overflow: auto; + padding-top: 24px; + + .fire_right_item { + width: 95%; + height: 183px; + background: url('/assets/images/homePage/fire/rightbgbig.png') no-repeat; + background-size: 100% 100%; + display: flex; + justify-content: center; + align-items: center; + color: #ECF7FF; + position: relative; + margin-bottom: 20px; + + .item_left { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/iconhome.png') no-repeat; + background-size: 100% 100%; + } + + .item_right { + width: calc(100% - 100px); + display: flex; + flex-wrap: wrap; + + + .item_right_left { + width: 100px; + font-size: 14px; + color: #ECF7FF; + font-family: ''; + } + + .item_right_right { + width: 180px; + font-size: 14px; + color: #9CF2FF; + letter-spacing: 0; + font-family: ''; + text-align: left; + } + + + } + + .position_bg { + position: absolute; + left: 0%; + bottom: 0%; + width: 85px; + height: 30px; + background: rgba(31, 237, 255, 0.1); + background-image: linear-gradient(180deg, rgba(0, 0, 0, 0) 80%, rgba(0, 255, 244, 0.98) 100%); + border-radius: 0 20px 0 0; + display: flex; + justify-content: space-evenly; + align-items: center; + + .position_icon { + width: 12px; + height: 12px; + background: url('/assets/images/homePage/fire/position.png') no-repeat; + background-size: 100% 100%; + } + } } +} + +.fire_item_right_container::-webkit-scrollbar { + width: 0 !important +} + +.item_left-container::-webkit-scrollbar { + width: 0 !important } + //警情数据分析 .alarm_data_analysis { width: 100%; @@ -207,4 +387,61 @@ } } +} + +.today_real_alarm { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + + .today_item { + width: 91%; + height: 41px; + background: url('/assets/images/homePage/fire/alarmbg.png') no-repeat; + background-size: 100% 100%; + display: flex; + justify-content: space-around; + align-items: center; + font-size: 14px; + color: #ECF7FF; + overflow: auto; + + .column1_alarm1 { + width: 83px; + height: 24px; + background: url('/assets/images/homePage/fire/alarm1.png') no-repeat; + background-size: 100% 100%; + padding-left: 27px; + } + + .column1_alarm2 { + width: 83px; + height: 24px; + background: url('/assets/images/homePage/fire/alarm2.png') no-repeat; + background-size: 100% 100%; + padding-left: 27px; + } + + .text_blue { + width: 100px; + display: flex; + + ._icon1 { + width: 8px; + height: 8px; + background: url('/assets/images/homePage/fire/triangle1.png') no-repeat; + background-size: 100% 100%; + } + + ._icon2 { + width: 8px; + height: 8px; + background: url('/assets/images/homePage/fire/triangle2.png') no-repeat; + background-size: 100% 100%; + } + } + } } \ No newline at end of file diff --git a/super-screen/client/src/sections/fire-control/containers/gis.js b/super-screen/client/src/sections/fire-control/containers/gis.js index 6e5d616..cae8946 100644 --- a/super-screen/client/src/sections/fire-control/containers/gis.js +++ b/super-screen/client/src/sections/fire-control/containers/gis.js @@ -300,7 +300,7 @@ function Map(props) { } const renderAlarms = () => { - + map.clearMap(); const alarms = [ { lng: 115.92365, lat: 28.557404, type: 'device', name: '廉租房1', kind: 'markeralarm' }, ] @@ -425,7 +425,7 @@ function Map(props) { <> {/* 延缓加载遮罩 */} {delay &&
} diff --git a/super-screen/client/src/sections/homePage/components/accessData.js b/super-screen/client/src/sections/homePage/components/accessData.js index 2d37d29..3beacf7 100644 --- a/super-screen/client/src/sections/homePage/components/accessData.js +++ b/super-screen/client/src/sections/homePage/components/accessData.js @@ -1,5 +1,5 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import { useFsRequest } from '$utils'; import { mathRound } from './util' function AccessData() { diff --git a/super-screen/client/src/sections/homePage/components/alarmList.js b/super-screen/client/src/sections/homePage/components/alarmList.js index 55181b5..d0709ec 100644 --- a/super-screen/client/src/sections/homePage/components/alarmList.js +++ b/super-screen/client/src/sections/homePage/components/alarmList.js @@ -1,5 +1,5 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import CarouselList from './public/carousel-list'; import { Tooltip } from 'antd'; import moment from 'moment'; diff --git a/super-screen/client/src/sections/homePage/components/dataShare.js b/super-screen/client/src/sections/homePage/components/dataShare.js index c8f2b08..a0bf9b3 100644 --- a/super-screen/client/src/sections/homePage/components/dataShare.js +++ b/super-screen/client/src/sections/homePage/components/dataShare.js @@ -1,5 +1,5 @@ import React from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import { useFsRequest } from '$utils'; import { mathRound } from './util'; function DataShare(props) { diff --git a/super-screen/client/src/sections/homePage/components/dataTop5.js b/super-screen/client/src/sections/homePage/components/dataTop5.js index bbe7a9e..8ad9c38 100644 --- a/super-screen/client/src/sections/homePage/components/dataTop5.js +++ b/super-screen/client/src/sections/homePage/components/dataTop5.js @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import ReactEcharts from 'echarts-for-react'; import './style.less'; import { useFsRequest } from '$utils'; diff --git a/super-screen/client/src/sections/homePage/components/hotspotData.js b/super-screen/client/src/sections/homePage/components/hotspotData.js index f8a7240..0041c5c 100644 --- a/super-screen/client/src/sections/homePage/components/hotspotData.js +++ b/super-screen/client/src/sections/homePage/components/hotspotData.js @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import NoData from './public/noData'; import './style.less'; import { ApiTable, useFsRequest } from '$utils'; diff --git a/super-screen/client/src/sections/homePage/components/nodeResource.js b/super-screen/client/src/sections/homePage/components/nodeResource.js index e142a1e..14c26e5 100644 --- a/super-screen/client/src/sections/homePage/components/nodeResource.js +++ b/super-screen/client/src/sections/homePage/components/nodeResource.js @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; +import { Box } from '$components'; import { ApiTable, useFsRequest } from '$utils'; import './style.less'; function NodeResource(props) { diff --git a/super-screen/client/src/sections/homePage/containers/homePage.js b/super-screen/client/src/sections/homePage/containers/homePage.js index f01423e..19977e4 100644 --- a/super-screen/client/src/sections/homePage/containers/homePage.js +++ b/super-screen/client/src/sections/homePage/containers/homePage.js @@ -15,7 +15,7 @@ function homePage(props) {
{ - // dispatch(push('/waterprevention')) + dispatch(push('/waterprevention')) }}>
{ dispatch(push('/communitysafty')) }}>
{ dispatch(push('/firecontrol')) }}>
diff --git a/super-screen/client/src/sections/water-prevention/components/abnormalMonitoring.js b/super-screen/client/src/sections/water-prevention/components/abnormalMonitoring.js deleted file mode 100644 index e2107ed..0000000 --- a/super-screen/client/src/sections/water-prevention/components/abnormalMonitoring.js +++ /dev/null @@ -1,49 +0,0 @@ -import React, { useEffect, useState } from 'react' -import CarouselList from './public/carousel-list'; -import { Tooltip } from 'antd'; -import { ApiTable, useFsRequest } from '$utils'; -import moment from 'moment'; -function AbnormalMonitoring(props) { - - const { data: logs = {} } = useFsRequest({ - url: ApiTable.getLogs, - query: { - logState: false, - startTime: moment().subtract(7, 'days').format('YYYY-MM-DD HH:mm:ss'), - endTime: moment().format('YYYY-MM-DD HH:mm:ss') - }, - pollingInterval: 1000 * 60 - }); - - const dataSource = logs?.rows ? logs?.rows?.map(s => { - return [ -
- - {s?.acquisitionTask?.taskName?.length > 20 ? s?.acquisitionTask?.taskNamesubstring(0, 20) + '...' : s?.acquisitionTask?.taskName} - -
, - moment(s?.startTime).format('YYYY-MM-DD HH:mm:ss'), - moment(s?.endTime).valueOf() - moment(s?.startTime).valueOf() + '毫秒', -
- - {s?.details?.length > 20 ? s?.details.substring(0, 20) + '...' : s?.details} - -
- ] - }) : [] - return
-
异常监控
- -
-} - -export default AbnormalMonitoring; - - diff --git a/super-screen/client/src/sections/water-prevention/components/accessData.js b/super-screen/client/src/sections/water-prevention/components/accessData.js deleted file mode 100644 index 2d37d29..0000000 --- a/super-screen/client/src/sections/water-prevention/components/accessData.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react' -import Box from './public/table-card'; -import { useFsRequest } from '$utils'; -import { mathRound } from './util' -function AccessData() { - - const { data: accessdata = [] } = useFsRequest({ - url: 'homepage/accessdata', - pollingInterval: 1000 * 60, - cacheKey: 'accessdata', - }); - - - const renderBody = () => { - return
-
-
- 数据单位
{!accessdata?.projects ? '-' : accessdata?.projects?.split(',')?.length}
个 -
-
- 今日数据
{!accessdata?.res?.stat?.today ? '-' : accessdata?.res?.stat?.today > 1000 ? mathRound(accessdata?.res?.stat?.today) : accessdata?.res?.stat?.today}
{accessdata?.res?.stat?.today > 1000 ? '万条' : '条'} -
-
- 数据总量
{accessdata?.res?.stat?.datas ? Math.round(accessdata?.res?.stat?.datas / 10000) : '-'}
万条 -
-
- } - - return - {renderBody()} - -} - -export default AccessData; - - diff --git a/super-screen/client/src/sections/water-prevention/components/alarmList.js b/super-screen/client/src/sections/water-prevention/components/alarmList.js deleted file mode 100644 index 55181b5..0000000 --- a/super-screen/client/src/sections/water-prevention/components/alarmList.js +++ /dev/null @@ -1,52 +0,0 @@ -import React from 'react' -import Box from './public/table-card'; -import CarouselList from './public/carousel-list'; -import { Tooltip } from 'antd'; -import moment from 'moment'; -import NoData from './public/noData'; -import { useFsRequest } from '$utils'; - -function AlarmList(props) { - const { cardContentHeight } = props; - const { data: alarms = [] } = useFsRequest({ - url: 'homepage/alarms', - pollingInterval: 1000 * 60, - cacheKey: 'alarms', - }); - - - const data = alarms.map(s => { - return [ - s.content, - s.level == 1 ? '一级' : s.level == 2 ? '二级' : s.level == 3 ? '三级' : '四级', - moment(s.time).format('YYYY-MM-DD HH:mm:ss') - ] - }) - - const renderBody = () => { - return { - return [ - - {s[0].length > 20 ? s[0]?.substring(0, 20) + '...' : s[0]} - , -
{s[1]}
, - s[2] - ] - })} - rowNum={6} - height={cardContentHeight} - multiellipsis - columnWidth={[180, 80, 150]} - /> - } - - return - {alarms?.length > 0 ? renderBody() : } - -} - -export default AlarmList; - - diff --git a/super-screen/client/src/sections/water-prevention/components/centerTop.js b/super-screen/client/src/sections/water-prevention/components/centerTop.js deleted file mode 100644 index a70d656..0000000 --- a/super-screen/client/src/sections/water-prevention/components/centerTop.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import './style.less' - -function CenterTop(props) { - - - return
-
-
共享交换
-
数据监控
-
数据治理
-
数据采集
-
-
-} - -export default CenterTop; - - diff --git a/super-screen/client/src/sections/water-prevention/components/charts/constants.js b/super-screen/client/src/sections/water-prevention/components/charts/constants.js new file mode 100644 index 0000000..25c8bae --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/charts/constants.js @@ -0,0 +1,78 @@ +export const RING_COLORS = [ + { linearGradientTo: 'rgba(2, 14, 35, 1)', linearGradientFrom: 'rgba(23, 106, 231, 1)' }, + { linearGradientTo: 'rgba(50, 40, 2, 1)', linearGradientFrom: 'rgba(255, 175, 0, 1)' }, + { linearGradientTo: 'rgba(2, 71, 119, 1)', linearGradientFrom: 'rgba(0, 169, 255, 1)' }, + { linearGradientTo: 'rgba(3, 56, 26, 1)', linearGradientFrom: 'rgba(0, 255, 110, 1)' }, + { linearGradientTo: 'rgba(0, 48, 64, 1)', linearGradientFrom: 'rgba(0, 227, 255, 1)' }, + { linearGradientTo: 'rgba(57, 2, 4, 1)', linearGradientFrom: 'rgba(254, 142, 145, 1)' }, + ]; + + export const tooltip = { + backgroundColor: 'rgba(3, 65, 118, 0.8)', + borderColor: 'rgba(3, 65, 118, 0.8)', + textStyle: { + color: '#fff', + }, + }; + + export const COMMON_COLOR = { + lineColor: '#2F5384', + labelColor: '#fff', + axisLineColor: '#0D4892', + splitLineColor: '#0D4892', + }; + + const getAreaColor = (color) => ({ + fromColor: color.replace('1)', '0)'), + toColor: color.replace('1)', '1)'), + }); + export const DEFAULT_COLOR = ['rgba(9,203,240, 1)', 'rgba(16,127,222, 1)', 'rgba(17,187,112, 1)', 'rgba(255, 143, 145, 1)', 'rgba(0, 168, 251, 1)', 'rgba(7, 246, 109, 1)', 'rgba(246, 136, 7, 1)']; + + export const DEFAULT_AREA_COLOR = DEFAULT_COLOR.map((color) => ({ + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [{ + offset: 0, color: getAreaColor(color).fromColor, // 0% 处的颜色 + }, { + offset: 1, color: getAreaColor(color).toColor, // 100% 处的颜色 + }], + global: false, // 缺省为 false + })); + + export const YAXIS_BLUE = { + axisTick: { + show: true, + lineStyle: { + color: 'rgba(0, 133, 246, 1)', + dashOffset: 10, + type: 'dashed', + }, + inside: true, + }, + axisLine: { + show: true, + lineStyle: { + color: 'rgba(0, 133, 246, 1)', + }, + }, + nameTextStyle: { + color: '#FFFFFF', + }, + axisLabel: { + color: '#FFFFFF', + fontSize: 14, + }, + splitLine: { + lineStyle: { + type: 'dashed', + color: 'rgba(91, 180, 218, 0.1)', + }, + }, + }; + export default { + RING_COLORS, tooltip, COMMON_COLOR, DEFAULT_COLOR, DEFAULT_AREA_COLOR, YAXIS_BLUE, + }; + \ No newline at end of file diff --git a/super-screen/client/src/sections/water-prevention/components/charts/ring.js b/super-screen/client/src/sections/water-prevention/components/charts/ring.js new file mode 100644 index 0000000..3186f45 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/charts/ring.js @@ -0,0 +1,122 @@ +import React from 'react'; +import ReactEcharts from 'echarts-for-react'; +import * as echarts from 'echarts'; +import { RING_COLORS, tooltip } from './constants'; +/** + * props + * height: 图表高度 + */ + +function RingChart(props) { + const { data, image = {} } = props; + // eslint-disable-next-line react/destructuring-assignment + const colors = props.colors || RING_COLORS; + const max = data.reduce((pre, cur) => pre + cur.value, 0); + const getOption = () => { + const option = { + graphic: { + type: 'image', + style: { + image: image.url, + width: image.width, + height: image.height, + }, + left: 'center', + top: 'center', + }, + title: { + text: max, + subtext: '站点总数', + textStyle: { + color: '#E2F8FF', + fontSize: 25, + align: 'center', + fontFamily: 'DINMediumItalic', + fontWeight: 'Italic', + letterSpacing: '2.08px', + }, + subtextStyle: { + fontSize: 14, + fontWeight: 400, + color: ['#E6EFFF'], + }, + x: 'center', + y: 'center', + top: '35%', + }, + tooltip: { + ...tooltip, + trigger: 'item', + formatter: '{b} : {c}个 ({d}%)', + position: ['10%', '40%'], + }, + // 渐变色 + color: colors.map((s) => { + const cs = new echarts.graphic.LinearGradient(1, 1, 0, 0, [ + { offset: 0, color: s.linearGradientFrom }, + { offset: 0.9, color: s.linearGradientTo }, + ]); + return cs; + }), + + series: [ + { + type: 'pie', + radius: ['66%', '80%'], + avoidLabelOverlap: false, + itemStyle: { + // 环图间隙 + borderColor: '#0A1024', + borderWidth: 3, + }, + label: { + show: false, + position: 'center', + }, + emphasis: { + label: { + show: false, + fontSize: '40', + fontWeight: 'bold', + }, + }, + labelLine: { + show: false, + }, + data, + }, + ], + }; + + return option; + }; + const { height, width } = props; + const options = getOption(); + const renderList = () => data.map((s, index) => ( +
+
+
+
{s.name}
+
+
{s.value}
+
+ )); + + return ( +
+
+ +
+
+ {renderList()} +
+
+ ); +} + +export default RingChart; diff --git a/super-screen/client/src/sections/water-prevention/components/dataShare.js b/super-screen/client/src/sections/water-prevention/components/dataShare.js deleted file mode 100644 index c8f2b08..0000000 --- a/super-screen/client/src/sections/water-prevention/components/dataShare.js +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react' -import Box from './public/table-card'; -import { useFsRequest } from '$utils'; -import { mathRound } from './util'; -function DataShare(props) { - - const { data: dataTotal = {} } = useFsRequest({ - url: 'homepage/datatotal/top5', - pollingInterval: 1000 * 60, - cacheKey: 'datatotal', - }); - - const { data: restfulInfo = {} } = useFsRequest({ - url: 'homepage/restful/info', - pollingInterval: 1000 * 60, - cacheKey: 'restfulInfo', - }); - - const renderItem = (s) => { - return
-
-
- {s.title} -
- {s.data}{s.unit} -
-
-
- } - - const leftData = [ - { key: '1', data: mathRound(dataTotal?.total), unit: '万条', title: '共享库数据总量' }, - { key: '2', data: restfulInfo?.total, unit: '次', title: '访问接口总次数' }, - { key: '3', data: restfulInfo?.totalUser, unit: '个', title: '访问接口用户总数' }] - const rightData = [ - { key: '2', data: restfulInfo?.todayTotal, unit: '次', title: '接口访问次数' }, - { key: '3', data: restfulInfo?.todayUser, unit: '个', title: '访问接口用户总数' }] - - return -
-
- {leftData.map(s => renderItem(s))} -
-
-
今日
- {rightData.map(s => renderItem(s))} -
-
-
-} - -export default DataShare; - - diff --git a/super-screen/client/src/sections/water-prevention/components/dataTop5.js b/super-screen/client/src/sections/water-prevention/components/dataTop5.js deleted file mode 100644 index bbe7a9e..0000000 --- a/super-screen/client/src/sections/water-prevention/components/dataTop5.js +++ /dev/null @@ -1,262 +0,0 @@ -import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; -import ReactEcharts from 'echarts-for-react'; -import './style.less'; -import { useFsRequest } from '$utils'; -import { mathRound } from './util'; -import NoData from './public/noData'; -function DataTop5(props) { - const { cardContentHeight } = props; - const { data: dataTotal = {} } = useFsRequest({ - url: 'homepage/datatotal/top5', - pollingInterval: 1000 * 60, - cacheKey: 'datatotal', - }); - - const renderBody = () => { - let chartData = dataTotal?.top5?.map(x => { - return { - name: x?.dataSource?.resourceCatalog?.name, - value: mathRound(x.dbRecordCount), - } - }) || [] - - let options = { - xAxis: { - splitLine: { - show: false, - }, - axisLabel: { - show: false, - }, - axisTick: { - show: false, - }, - splitArea: { show: false }, - axisLine: { - show: false, - }, - }, - tooltip: { - confine: true, - trigger: 'axis', - axisPointer: { - type: 'shadow', - }, - backgroundColor: 'rgba(13,30,44, 0.7)', - borderColor: 'rgba(3, 65, 118, 0.8)', - textStyle: { - color: '#fff', - }, - formatter: function (params) { - var name = params[0].name - if (name.length > 20) { - name = name.replace(/(.{20})/g, '$1
') // 每 30 个字符添加一个换行符 - } - var content = name - - return content + ' : ' + params[0].value + '万条' - } - }, - grid: { - top: 13, - bottom: -10, - left: '5%', - }, - yAxis: { - inverse: true, - axisLine: { - show: false, - }, - axisTick: { - show: false, - }, - axisLabel: { - textStyle: { - color: '#fff', - padding: [-5, 0, 35, 18], - }, - formatter(value, index) { - let str = '', num = 'TOP' + (index + 1) - let valueHandle = value.length > 10 ? value.substring(0, 10) + '...' : value - if (index === 0) { - str = '{a| ' + num + '}{title| ' + valueHandle + '}' - } else if (index === 1) { - str = '{b| ' + num + '}{title| ' + valueHandle + '}' - } else if (index === 2) { - str = '{c| ' + num + '}{title| ' + valueHandle + '}' - } else { - str = '{d| ' + num + '}{title| ' + valueHandle + '}' - } - return str - }, - rich: { - a: { - borderColor: '#EE6F7C', - borderWidth: 1, - borderRadius: [0, 10, 10, 0], - padding: [3.5, 10, 1, -13], - backgroundColor: 'rgba(238, 111, 124, 0.8)', - }, - b: { - borderColor: '#FFCF5F', - borderWidth: 1, - borderRadius: [0, 10, 10, 0], - padding: [3.5, 10, 1, -13], - backgroundColor: 'rgba(255, 207, 95, 0.7)', - }, - c: { - borderColor: '#00E8FF', - borderWidth: 1, - borderRadius: [0, 10, 10, 0], - padding: [3.5, 10, 1, -13], - backgroundColor: 'rgba(0, 232, 255, 0.7)', - }, - d: { - borderColor: '#1A90FF', - borderWidth: 1, - borderRadius: [0, 10, 10, 0], - padding: [3.5, 10, 1, -13], - backgroundColor: 'rgba(26, 144, 255, 0.7)', - }, - title: { - padding: [0, 0, 0, 3], - }, - }, - align: 'left', - }, - data: chartData.map((item) => item.name), - }, - series: [ - { - type: 'pictorialBar', - symbol: 'rect', - symbolRotate: 30, - symbolRepeat: 'fixed', - symbolClip: true, - symbolOffset: [0, -1.5], - symbolSize: [2, 12], - symbolMargin: '3', - itemStyle: { - normal: { - color: '#000726', - }, - }, - label: { - show: true, - color: '#C8F0FF', - fontFamily: 'Bebas', - fontSize: 12, - offset: [-9, 1], - position: 'right', - formatter(params) { - let result = '' - switch (params.dataIndex) { - case 0: - result = '{img|}{index0|' + params.value + '}{unit|}' - break - case 1: - result = '{img|}{index1|' + params.value + '}{unit|}' - break - case 2: - result = '{img|}{index2|' + params.value + '}{unit|}' - break - default: - result = '{img|}{index3|' + params.value + '}{unit|}' - break - } - return result - }, - rich: { - img: { - height: 18, - width: 20, - // backgroundColor: { image: arrow },这个图片自己切,这里上传不了(加了一个尾巴的形状) - }, - unit: { - color: '#C8F0FF', - fontSize: 11, - }, - index0: { - color: '#FFF', - fontFamily: 'Bebas', - padding: [-2, 2, 0, 0], - fontWeight: 'bold', - fontSize: 16, - }, - index1: { - color: '#FFF', - fontFamily: 'Bebas', - padding: [-2, 2, 0, 0], - fontWeight: 'bold', - fontSize: 16, - }, - index2: { - color: '#FFF', - fontFamily: 'Bebas', - padding: [-2, 2, 0, 0], - fontWeight: 'bold', - fontSize: 16, - }, - index3: { - color: '#FFF', - fontFamily: 'Bebas', - padding: [-2, 2, 0, 0], - fontWeight: 'bold', - fontSize: 16, - }, - }, - }, - symbolBoundingData: Math.max(...chartData.map((item) => item.value)) * 1.3, - data: chartData.map((item) => item.value), - z: 2, - }, - { - type: 'bar', - barWidth: 10, - data: chartData.map((item) => item.value), - itemStyle: { - normal: { - color: '#54DEFA', - }, - }, - z: 1, - }, - { - type: 'bar', - barGap: '-125%', // 设置外框粗细 - data: chartData.map((items) => Math.max(...chartData.map((item) => item.value)) * 1.3), - barWidth: 15, - itemStyle: { - color: 'none', - borderColor: '#979797', - }, - z: 0, - }, - ], - }; - - return - } - - return - { - dataTotal?.top5?.length > 0 ? - <> -
数据量:万条
- {renderBody()} - - : - } - -
-} - -export default DataTop5; - - diff --git a/super-screen/client/src/sections/water-prevention/components/emergency-left-bottom.js b/super-screen/client/src/sections/water-prevention/components/emergency-left-bottom.js new file mode 100644 index 0000000..b5eea29 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/emergency-left-bottom.js @@ -0,0 +1,55 @@ +import React from 'react' +import { Box } from '$components'; + +function Infrastructure(props) { + + + return +
+
+
+
+
+
2023-06-20 17:00:00
+
二级预警
+
+
萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个
+
+
+
+
+
+
+
2023-06-20 17:00:00
+
一级预警
+
+
萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个
+
+
+
+
+
+
+
2023-06-20 17:00:00
+
二级预警
+
+
萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个
+
+
+
+
+
+
+
2023-06-20 17:00:00
+
二级预警
+
+
萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个
+
+
+
+ +} + +export default Infrastructure; + + diff --git a/super-screen/client/src/sections/water-prevention/components/emergency-left-top.js b/super-screen/client/src/sections/water-prevention/components/emergency-left-top.js new file mode 100644 index 0000000..bcded96 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/emergency-left-top.js @@ -0,0 +1,13 @@ +import React from 'react' +import { Box } from '$components'; + +function BasicInfo() { + + return + + +} + +export default BasicInfo; + + diff --git a/super-screen/client/src/sections/water-prevention/components/emergency-right-bottom.js b/super-screen/client/src/sections/water-prevention/components/emergency-right-bottom.js new file mode 100644 index 0000000..f307ef6 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/emergency-right-bottom.js @@ -0,0 +1,37 @@ +import React, { useEffect, useState } from 'react' +import { Box } from '$components'; +import './style.less'; + + +function DataTop5(props) { + + + return +
+
+
排名
+
小区名称
+
人流量/人次
+
+ +
+ {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(s => { + return
+
+
+
{s}
+ +
+
+
小区名称{s}
+
{1400 - s}
+
+ })} +
+
+
+} + +export default DataTop5; + + diff --git a/super-screen/client/src/sections/water-prevention/components/emergency-right-top.js b/super-screen/client/src/sections/water-prevention/components/emergency-right-top.js new file mode 100644 index 0000000..087da32 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/emergency-right-top.js @@ -0,0 +1,43 @@ +import React, { useEffect, useState } from 'react' +import { Box } from '$components'; +import './style.less'; + +function CitySafty(props) { + + return +
+ { + [1, 2, 3, 4, 5, 6, 7].map((s, index) => { + return
+
+
+
+
场所名称
+
南昌县人民公园中心市场
+
+
+
场所地点
+
南昌县中心街道人民路168号 + 人民路168号人民路168号
+
+
+
承载人数
+
2000 人
+
+
+
目标距离
+
2.5 Km
+
+
+
场所{index + 1}
+
+ }) + } + +
+ +} + +export default CitySafty; + + diff --git a/super-screen/client/src/sections/water-prevention/components/hotspotData.js b/super-screen/client/src/sections/water-prevention/components/hotspotData.js deleted file mode 100644 index f8a7240..0000000 --- a/super-screen/client/src/sections/water-prevention/components/hotspotData.js +++ /dev/null @@ -1,42 +0,0 @@ -import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; -import NoData from './public/noData'; -import './style.less'; -import { ApiTable, useFsRequest } from '$utils'; -function HotspotData(props) { - - const { data: restfulInfo = {} } = useFsRequest({ - url: 'homepage/restful/info', - pollingInterval: 1000 * 60, - cacheKey: 'restfulInfo', - }); - - const top3 = restfulInfo?.top3 - return - {top3?.length > 0 ? -
-
-
- {top3[0].name?.length > 8 ? top3[0].name.substring(0, 8) + '...' : top3[0].name} -
{top3[0].count}
-
-
- {top3?.length > 2 && <> - {top3[2].name?.length > 8 ? top3[2].name.substring(0, 8) + '...' : top3[2].name} -
{top3[2].count}
- } -
-
- {top3?.length > 1 && <> - {top3[1].name?.length > 8 ? top3[1].name.substring(0, 8) + '...' : top3[1].name} -
{top3[1].count}
- } -
-
: - } -
-} - -export default HotspotData; - - diff --git a/super-screen/client/src/sections/water-prevention/components/left-bottom.js b/super-screen/client/src/sections/water-prevention/components/left-bottom.js new file mode 100644 index 0000000..0f3f86f --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/left-bottom.js @@ -0,0 +1,58 @@ +import React from 'react' +import { Box } from '$components'; +import RingChart from './charts/ring' +function LeftBottom(props) { + + const colors = [ + { + linearGradientTo: 'rgba(5, 207, 247, 0)', + linearGradientFrom: 'rgba(5, 207, 247, 1)', + }, + { + linearGradientTo: 'rgba(23, 123, 238, 1)', + linearGradientFrom: 'rgba(23, 123, 238, 0)', + }, + { + linearGradientTo: 'rgba(234, 185, 102, 1)', + linearGradientFrom: 'rgba(234, 185, 102, 0)', + }, + { + linearGradientTo: 'rgba(108, 208, 106, 0)', + linearGradientFrom: 'rgba(108, 208, 106, 1)', + }, + { + linearGradientTo: 'rgba(194, 208, 213, 0)', + linearGradientFrom: 'rgba(194, 208, 213, 1)', + }, + { + linearGradientTo: 'rgba(213, 204, 92, 0)', + linearGradientFrom: 'rgba(213, 204, 92, 1)', + }, + ]; + + const data = [ + { name: '泵站站点', value: 2560 }, + { name: '雨量站点', value: 1560 }, + { name: '水位站点', value: 3560 } + ] + + return + + +} + +export default LeftBottom; + + diff --git a/super-screen/client/src/sections/water-prevention/components/left-top.js b/super-screen/client/src/sections/water-prevention/components/left-top.js new file mode 100644 index 0000000..b60c952 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/left-top.js @@ -0,0 +1,30 @@ +import React from 'react' +import { Box } from '$components'; +import { Select } from 'antd'; +const { Option } = Select; +function BasicInfo() { + + const renderSubtitle = () => ( + + ); + + return + + +} + +export default BasicInfo; + + diff --git a/super-screen/client/src/sections/water-prevention/components/nodeResource.js b/super-screen/client/src/sections/water-prevention/components/nodeResource.js deleted file mode 100644 index e142a1e..0000000 --- a/super-screen/client/src/sections/water-prevention/components/nodeResource.js +++ /dev/null @@ -1,39 +0,0 @@ -import React, { useEffect, useState } from 'react' -import Box from './public/table-card'; -import { ApiTable, useFsRequest } from '$utils'; -import './style.less'; -function NodeResource(props) { - const { data: cluters = {} } = useFsRequest({ - url: 'homepage/datatotal/cluters', - pollingInterval: 1000 * 20, - }); - - const renderBody = () => { - return
-
-
{cluters?.disk}%
-
硬盘
-
-
-
-
{cluters?.memory}%
-
内存
-
-
-
-
{cluters?.cpu}%
-
CPU
-
-
-
- - } - - return - {renderBody()} - -} - -export default NodeResource; - - diff --git a/super-screen/client/src/sections/water-prevention/components/public/index.less b/super-screen/client/src/sections/water-prevention/components/public/index.less index e67fb57..f575bd3 100644 --- a/super-screen/client/src/sections/water-prevention/components/public/index.less +++ b/super-screen/client/src/sections/water-prevention/components/public/index.less @@ -3,14 +3,11 @@ } .card-title { - // background: linear-gradient(to bottom, #fafafb, #92cbff); - // background-clip: border-box; - // -webkit-background-clip: text; - color: #fff; - font-size: 22px; + height: 31px; font-family: YouSheBiaoTiHei; - padding-left: 20px; - // font-weight: 600; + font-size: 24px; + color: #FFFFFF; + letter-spacing: 2px; } /* 滚动列表 */ @@ -77,4 +74,34 @@ background-repeat: no-repeat; background-size: 100% 100%; margin-left: 13px; +} + +.subtitle_ { + float: right; + margin-top: 12px; + margin-right: 20px; + width: 200px; + text-align: center; + + ._item_select { + width: 60px; + height: 20px; + display: inline-block; + font-size: 14px; + color: #24DCF7; + border: 1px solid #12B2E5; + background-color: rgba(91, 193, 255, 0.2); + margin-right: 3px; + } + + ._item { + width: 60px; + height: 20px; + display: inline-block; + font-size: 14px; + color: #4C9FFF; + border: 1px solid #0B6AEA; + background-color: rgba(35, 108, 254, 0.3); + margin-right: 3px; + } } \ No newline at end of file diff --git a/super-screen/client/src/sections/water-prevention/components/public/table-card.js b/super-screen/client/src/sections/water-prevention/components/public/table-card.js index ada8a4e..a46835e 100644 --- a/super-screen/client/src/sections/water-prevention/components/public/table-card.js +++ b/super-screen/client/src/sections/water-prevention/components/public/table-card.js @@ -4,7 +4,7 @@ import React from 'react' import './index.less' class Box extends React.Component { render() { - const { title, height = '100%', children, bodyPaddingTop = 1, titlePaddingTop, margin, overflow } = this.props + const { title, height = '100%', children, bodyPaddingTop = 1, titlePaddingTop, margin, overflow, subtitle } = this.props const headerbg = { background: 'url(/assets/images/homePage/bigscreen/headertitlebg.png) no-repeat', @@ -14,17 +14,24 @@ class Box extends React.Component {
-
- {title}
+
+ {title} + + {subtitle &&
+
本周
+
本月
+
本年
+
}
-
- {children} +
+ {children} +
+
) diff --git a/super-screen/client/src/sections/water-prevention/components/right-bottom.js b/super-screen/client/src/sections/water-prevention/components/right-bottom.js new file mode 100644 index 0000000..904aafd --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/right-bottom.js @@ -0,0 +1,35 @@ +import React, { useEffect, useState } from 'react' +import { Box } from '$components'; +import './style.less'; + + +function DataTop5(props) { + + + return +
+
+
南昌大道14:12:32
+
+
+
南昌大道11:34:12
+
+
+
南昌大道08:34:12
+
+
+
南昌大道09:12:34
+
+
+
南昌大道08:34:12
+
+
+
南昌大道09:12:34
+
+
+
+} + +export default DataTop5; + + diff --git a/super-screen/client/src/sections/water-prevention/components/right-top.js b/super-screen/client/src/sections/water-prevention/components/right-top.js new file mode 100644 index 0000000..a9073d7 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/components/right-top.js @@ -0,0 +1,38 @@ +import React, { useEffect, useState } from 'react' +import { Box } from '$components'; +import './style.less'; + +function CitySafty(props) { + + return +
+
+
点位名称
+
时间
+
水位
+
未来1小时趋势
+
+ +
+ {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((s, index) => { + return
+
+ 点位{index + 1} +
+
2023-01-02 12:12:12
+
111
+
+
+ {index % 2 == 0 ? '正常' : '告警'} +
+
+
+ })} +
+
+ +} + +export default CitySafty; + + diff --git a/super-screen/client/src/sections/water-prevention/components/style.less b/super-screen/client/src/sections/water-prevention/components/style.less index b544be6..017147d 100644 --- a/super-screen/client/src/sections/water-prevention/components/style.less +++ b/super-screen/client/src/sections/water-prevention/components/style.less @@ -1,373 +1,661 @@ -@card-height: calc(100% - 42px - 13px); //左右卡片内容高度定义 目前卡片为等高 - -//节点资源 -.node-resource-container { +.item_left-container { display: flex; - height: @card-height; width: 100%; + height: 100%; + text-align: center; + flex-direction: column; align-items: center; + overflow: auto; - ._item { - width: 33%; + .alarm_time { + width: 98%; + height: 225px; + background: url('/assets/images/homePage/fire/alarmtime.png') no-repeat; + background-size: 100% 100%; display: flex; - flex-direction: column; + justify-content: center; align-items: center; + font-family: YouSheBiaoTiHei; + font-size: 48px; + color: #ECF7FF; + } - ._noderesource_data { - font-family: D-DINExp-Bold; - font-weight: 600; - font-size: 24px; - color: #FFFFFF; - line-height: 43.2px; - display: flex; - align-items: center; + .end_event { + width: 202px; + height: 39px; + background-image: linear-gradient(180deg, #711313 0%, #b3000063 52%, #711313 100%); + border: 1.5px solid #A20000; + box-shadow: inset 0 1px 14px 0 #ff525259; + border-radius: 2px; + display: flex; + justify-self: center; + align-items: center; + color: #ECF7FF; + justify-content: center; + font-size: 18px; + } - ._percent { - opacity: 0.8; - font-family: PingFangSC-Regular; - font-weight: 400; - font-size: 12px; - color: #C8F0FF; - text-align: left; - line-height: 24px; - } + .event_title { + color: #fff; + font-size: 16px; + display: flex; + justify-content: space-around; + align-items: center; + width: 81%; + margin-top: 30px; + margin-bottom: 10px; + + .event_title_left { + width: 70px; + height: 2.37px; + background-image: linear-gradient(90deg, rgba(0, 102, 255, 0) 0%, #377EE8 97%); } - ._noderesource_title { - font-family: YouSheBiaoTiHei; - font-size: 20px; - color: #D8F0FF; - letter-spacing: 1.54px; - text-align: center; - text-shadow: 0 0 10px rgba(0, 145, 255, 0.5); - margin-bottom: 17px; + .event_title_right { + width: 70px; + height: 2.37px; + transform: scaleX(-1); + background-image: linear-gradient(90deg, rgba(0, 102, 255, 0) 0%, #377EE8 97%); + } + } + + .left_second_bg { + width: 95%; + height: 160px; + background: url('/assets/images/homePage/fire/secondbg.png') no-repeat; + background-size: 100% 100%; + + } + + .left_third_bg { + width: 95%; + height: 80px; + background: url('/assets/images/homePage/fire/bg3.png') no-repeat; + background-size: 100% 100%; + display: flex; + align-items: center; + justify-content: space-around; + margin-bottom: 20px; + + .left_item_left1 { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/lefticon1.png') no-repeat; + background-size: 100% 100%; } - .disk_icon { - width: 68.73px; - height: 62.77px; - background: url('/assets/images/homePage/bigscreen/disk.png'); - background-repeat: no-repeat; + .left_item_left2 { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/lefticon2.png') no-repeat; background-size: 100% 100%; } - .cpu_icon { - width: 68.73px; - height: 62.77px; - background: url('/assets/images/homePage/bigscreen/cpu.png'); - background-repeat: no-repeat; + .left_item_left3 { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/lefticon3.png') no-repeat; background-size: 100% 100%; } - .memory_icon { - width: 68.73px; - height: 62.77px; - background: url('/assets/images/homePage/bigscreen/memory.png'); - background-repeat: no-repeat; + .left_item_left4 { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/lefticon4.png') no-repeat; background-size: 100% 100%; } + + .left_item_right1 { + width: calc(100% - 70px); + color: rgba(236, 247, 255, 1); + } } + } -//接入数据统计 -.access_data { +.fire_item_right_container { display: flex; - height: @card-height; width: 100%; - justify-content: center; + height: 100%; + text-align: center; + flex-direction: column; + align-items: center; + overflow: auto; + padding-top: 24px; + + .fire_right_item { + padding-top: 16px; + padding-bottom: 16px; + width: 95%; + height: 183px; + background: url('/assets/images/homePage/fire/rightbgbig.png') no-repeat; + background-size: 100% 100%; + display: flex; + justify-content: center; + align-items: center; + color: #ECF7FF; + position: relative; + margin-bottom: 20px; + + .item_left { + width: 50px; + height: 50px; + background: url('/assets/images/homePage/fire/iconhome.png') no-repeat; + background-size: 100% 100%; + } - font-family: PingFangSC-Regular; - font-weight: 400; - font-size: 14px; - color: #FFFFFF; + .item_right { + width: calc(100% - 100px); + display: flex; + flex-wrap: wrap; - ._img { - width: 230px; - height: 95%; - background: url('/assets/images/homePage/bigscreen/accessdata.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - } - .data_unit { - position: absolute; - top: 27%; - right: 21%; + .item_right_left { + width: 100px; + font-size: 14px; + color: #ECF7FF; + font-family: ''; + } - .data_number { - line-height: 25px; - font-family: D-DINExp-Bold; - font-weight: 700; - font-size: 20px; - color: #3E86FF; - letter-spacing: 0; - } - } + .item_right_right { + width: 180px; + font-size: 14px; + color: #9CF2FF; + letter-spacing: 0; + font-family: ''; + text-align: left; + } - .data_today { - position: absolute; - bottom: 13%; - right: 79%; - text-align: right; - .data_number { - line-height: 25px; - font-family: D-DINExp-Bold; - font-weight: 700; - font-size: 20px; - color: #00F6E4; - letter-spacing: 0; } - } - .data_total { - position: absolute; - bottom: 13%; - left: 79%; + .position_bg { + position: absolute; + left: 0%; + bottom: 0%; + width: 85px; + height: 30px; + background: rgba(31, 237, 255, 0.1); + background-image: linear-gradient(180deg, rgba(0, 0, 0, 0) 80%, rgba(0, 255, 244, 0.98) 100%); + border-radius: 0 20px 0 0; + display: flex; + justify-content: space-evenly; + align-items: center; - .data_number { - line-height: 25px; - font-family: D-DINExp-Bold; - font-weight: 700; - font-size: 20px; - color: #FFDC4E; - letter-spacing: 0; + .position_icon { + width: 12px; + height: 12px; + background: url('/assets/images/homePage/fire/position.png') no-repeat; + background-size: 100% 100%; + } } } } -.data_top5_unit { - position: absolute; - right: 4%; - top: 18%; - font-family: PingFangSC-Regular; - font-weight: 400; - font-size: 12px; - color: #C8F0FF; + +.fire_item_right_container::-webkit-scrollbar { + width: 0 !important } -.hotspot_data_container { - display: flex; - height: @card-height; +.item_left-container::-webkit-scrollbar { + width: 0 !important +} + + +//警情数据分析 +.alarm_data_analysis { width: 100%; - justify-content: center; + height: 100%; + display: flex; + justify-content: space-around; + align-items: center; - font-family: PingFangSC-Regular; - font-weight: 400; - font-size: 14px; - color: #FFFFFF; + ._item_left { + width: 209px; + height: 100%; - ._img { - width: 203px; - height: 80%; - background: url('/assets/images/homePage/bigscreen/hotspotdatabg.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - } + ._img { + width: 209px; + height: 209px; + background: url('/assets/images/homepage/fire/realalarmbg.png') no-repeat; + background-size: 100% 100%; + display: flex; + align-items: center; + justify-content: center; + font-family: D-DINExp-Italic; + font-weight: Italic; + font-size: 48px; + color: #FFFFFF; + letter-spacing: 0; + } - .hotspot_title { - padding: 2px; - padding-left: 6px; - padding-right: 6px; - background: rgba(77, 241, 227, 0.08); - border: 1px solid rgba(77, 241, 227, 0.1); - box-shadow: inset 0 0 20px 0 rgba(28, 185, 196, 0.23); + ._text { + font-family: YouSheBiaoTiHei; + font-size: 20px; + color: #FFFFFF; + letter-spacing: 0; + margin-top: -30px; + text-align: center; + } } + ._item_right { + width: 200px; - .hotspot_data_number { - font-family: D-DINExp-Bold; - font-weight: 700; - font-size: 18px; - color: #FFFFFF; - } + ._iconphone { + width: 50.96px; + height: 45px; + background: url('/assets/images/homepage/fire/iconphone.png') no-repeat; + background-size: 100% 100%; + } - ._top1 { - position: absolute; - top: 25%; - right: 63%; - text-align: right; - } + ._iconreal { + width: 50.96px; + height: 45px; + background: url('/assets/images/homepage/fire/iconreal.png') no-repeat; + background-size: 100% 100%; + } - ._top2 { - position: absolute; - bottom: 22%; - right: 67%; - text-align: center; - } + ._iconmistake { + width: 50.96px; + height: 45px; + background: url('/assets/images/homepage/fire/iconmistake.png') no-repeat; + background-size: 100% 100%; + } - ._top3 { - position: absolute; - bottom: 34%; - left: 73%; - } -} + .right_item_right { + width: 155px; + margin-left: 16px; -//数据共享 -.data_share { - display: flex; - height: @card-height; + .alarm_title { + font-size: 14px; + color: #ECF7FF; + letter-spacing: 0; + } - ._left_content { - width: 50%; - height: 90%; - padding-left: 30px; - display: flex; - flex-direction: column; - justify-content: space-between; - } + .alarm_number { + font-family: D-DINExp-Italic; + font-weight: Italic; + font-size: 28px; + color: #24DCF7; + letter-spacing: 0; + margin-right: 50px; + } - ._right_content { - ._today_text { - font-family: YouSheBiaoTiHei; - font-size: 24px; - color: #FFFFFF; - letter-spacing: 0.5px; - position: absolute; - right: 6%; - top: 21%; + .alarm_unit { + font-size: 14px; + color: #5999C8; + letter-spacing: 0; + } } - padding-top: 23px; + + } +} + +//实时数据 +.realtime_data { + height: 100%; + padding: 12px 30px 12px 30px; + + .realtime_item { display: flex; - flex-direction: column; - width: 47%; - height: 95%; - background: url(/assets/images/homePage/bigscreen/todaybg.png); - background-repeat: no-repeat; + background: url('/assets/images/homePage/fire/realtimebg.png') no-repeat; background-size: 100% 100%; - justify-content: space-evenly; + height: 45%; + width: 100%; + margin-bottom: 5%; align-items: center; + // padding: 16px 22px 16px 22px; + + ._icon1 { + width: 80px; + height: 80px; + background: url('/assets/images/homePage/fire/icon1.png') no-repeat; + background-size: 100% 100%; + } + + ._icon2 { + width: 80px; + height: 80px; + background: url('/assets/images/homePage/fire/icon2.png') no-repeat; + background-size: 100% 100%; + } + ._text { + width: calc(100% - 100px); + display: flex; + flex-direction: column; + + ._row1 { + color: #C3E6FF; + width: 100%; + height: 22px; + background: rgba(0, 88, 204, 0.5); + justify-content: space-around; + display: flex; + + } + + ._row2 { + font-size: 14px; + color: #00FF87; + justify-content: space-around; + display: flex; + height: 42px; + + ._number { + font-family: D-DIN-Italic; + font-weight: Italic; + font-size: 28px; + color: #ECF7FF; + margin-right: 6px; + } + } + } } +} - ._item_content { - display: flex; +.realtime_data::-webkit-scrollbar { + width: 0 !important +} +.water_video_container { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + + ._item { + width: 46%; + height: 32%; + background: url('/assets/images/homePage/fire/videobg.png') no-repeat; + background-size: 100% 100%; + position: relative; + + .video_bottom { + position: absolute; + bottom: 9%; + left: 4%; + width: 91%; + height: 20px; + background: rgba(0, 0, 0, 0.4); + font-size: 12px; + color: #C3E6FF; + display: flex; + justify-content: space-between; - ._item_icon1 { - width: 52px; - height: 52px; - background: url('/assets/images/homePage/bigscreen/1.png'); - background-repeat: no-repeat; - background-size: 100% 100%; } + } +} + +.today_real_alarm { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; - ._item_icon2 { - width: 52px; - height: 52px; - background: url('/assets/images/homePage/bigscreen/2.png'); - background-repeat: no-repeat; + .today_item { + width: 91%; + height: 41px; + background: url('/assets/images/homePage/fire/alarmbg.png') no-repeat; + background-size: 100% 100%; + display: flex; + justify-content: space-around; + align-items: center; + font-size: 14px; + color: #ECF7FF; + overflow: auto; + + .column1_alarm1 { + width: 83px; + height: 24px; + background: url('/assets/images/homePage/fire/alarm1.png') no-repeat; background-size: 100% 100%; + padding-left: 27px; } - ._item_icon3 { - width: 52px; - height: 52px; - background: url('/assets/images/homePage/bigscreen/3.png'); - background-repeat: no-repeat; + .column1_alarm2 { + width: 83px; + height: 24px; + background: url('/assets/images/homePage/fire/alarm2.png') no-repeat; background-size: 100% 100%; + padding-left: 27px; } - ._item_text { - color: #C8F0FF; - padding-left: 6px; + .text_blue { + width: 100px; + display: flex; - .number_container { - ._number { - font-family: D-DINExp-Bold; - font-weight: 700; - font-size: 22px; - color: #FFFFFF; - } + ._icon1 { + width: 8px; + height: 8px; + background: url('/assets/images/homePage/fire/triangle1.png') no-repeat; + background-size: 100% 100%; + } - display: flex; - align-items: center; - justify-content: space-evenly; - width: 112px; - height: 28px; - background-image: linear-gradient(227deg, #3196AB 0%, #2091cd00 100%); + ._icon2 { + width: 8px; + height: 8px; + background: url('/assets/images/homePage/fire/triangle2.png') no-repeat; + background-size: 100% 100%; } } } } -//大屏中间上部分 -.center_top_data { - ._center_card1 { - width: 353px; - height: 74px; - font-family: YouSheBiaoTiHei; - font-size: 22px; - color: #FFFFFF; - letter-spacing: 0.46px; - text-align: center; - position: absolute; - top: -3%; - left: 32%; - background: url(/assets/images/homePage/bigscreen/centerdatabg1.png); +//小区人流量排名 +.water_traffic_ranking { + height: 100%; + padding: 14px 8px 14px 8px; + + ._rank_title { + height: 34.64px; + background: url('/assets/images/homePage/communtity/ranktitle.png'); background-repeat: no-repeat; background-size: 100% 100%; + color: #FFFFFF; + font-size: 16px; display: flex; align-items: center; - justify-content: center; + justify-content: space-around; + + ._rank_item1 { + text-align: center; + width: 25%; + } + + ._rank_item2 { + text-align: center; + width: 20%; + } + + ._rank_item3 { + text-align: right; + width: 25%; + } + + ._rank_item4 { + text-align: center; + width: 35%; + } } - ._center_card2 { - width: 146px; - height: 35px; - font-family: YouSheBiaoTiHei; - font-size: 16px; - color: #35D0FF; - letter-spacing: 0.46px; - text-align: center; - position: absolute; - top: 26%; - left: 42%; - background: url(/assets/images/homePage/bigscreen/centerdatabg2.png); + .rank_content_overflow { + height: calc(100% - 35px); + overflow: auto; + } + + ._rank_content { + margin-top: 12px; + height: 34.64px; + background: url('/assets/images/homePage/communtity/rankcontent.png'); background-repeat: no-repeat; background-size: 100% 100%; + color: #E2F8FF; + font-size: 14px; display: flex; align-items: center; - justify-content: center; + justify-content: space-around; + + ._rank_item1 { + text-align: center; + width: 15%; + } + + ._rank_item2 { + // text-align: center; + width: 40%; + } + + ._rank_item3 { + // text-align: center; + width: 20%; + + ._upicon { + background: url('/assets/images/homePage/water/up.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + width: 13px; + height: 13px; + display: inline-block; + margin-left: 3px; + } + + ._downicon { + background: url('/assets/images/homePage/water/down.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + width: 13px; + height: 13px; + display: inline-block; + margin-left: 3px; + } + } + + ._rank_item4 { + // text-align: center; + width: 20%; + padding-top: 8px; + + .normalbg { + background: url('/assets/images/homePage/water/normal.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + width: 70px; + height: 21.64px; + padding-left: 30px; + line-height: 9px; + color: #24DCF7; + } + + .warningbg { + background: url('/assets/images/homePage/water/warning.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + width: 70px; + height: 21.64px; + color: #FAC46E; + padding-left: 30px; + line-height: 9px; + } + } } - ._center_card3 { - width: 146px; - height: 35px; - font-family: YouSheBiaoTiHei; - font-size: 16px; - color: #35D0FF; - letter-spacing: 0.46px; - text-align: center; - position: absolute; - top: 52%; - left: 42%; - background: url(/assets/images/homePage/bigscreen/centerdatabg2.png); + .topbg1 { + width: 28px; + height: 10px; + background: url('/assets/images/homePage/communtity/top1.png'); background-repeat: no-repeat; background-size: 100% 100%; - display: flex; - align-items: center; - justify-content: center; + display: inline-block; } - ._center_card4 { - width: 146px; - height: 35px; - font-family: YouSheBiaoTiHei; - font-size: 16px; - color: #35D0FF; - letter-spacing: 0.46px; - text-align: center; - position: absolute; - top: 74%; - left: 42%; - background: url(/assets/images/homePage/bigscreen/centerdatabg2.png); + .topbg2 { + width: 28px; + height: 10px; + background: url('/assets/images/homePage/communtity/top2.png'); background-repeat: no-repeat; background-size: 100% 100%; - display: flex; - align-items: center; - justify-content: center; + display: inline-block; + } + + .topbg3 { + width: 28px; + height: 10px; + background: url('/assets/images/homePage/communtity/top3.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + display: inline-block; + } + +} + + +//建设数据 +.type-chart-wrapper { + width: 220px; + height: 220px; + background-image: url("/assets/images/ring_chart_bg.png"); + background-size: 100% 100%; +} + +.type-leagle-wrapper { + padding-left: 30px; + padding-right: 36px; + width: 100%; + height: 100px; + flex-wrap: wrap; + align-content: space-between; + + .type-leagle-item { + width: 157px; + height: 24px; + background-image: linear-gradient(90deg, #19222F 0%, rgba(30, 41, 56, 0) 100%); + padding: 0 30px 0 8px; + justify-content: space-between; + + .type-leagle-dot { + width: 8px; + height: 8px; + margin-right: 6px; + } + + .type-leagle-label { + color: rgba(212, 237, 253, 0.6); + font-size: 14px; + font-weight: 400; + letter-spacing: 0; + } + + .type-leagle-value { + color: rgba(216, 240, 255, 1); + font-size: 16px; + font-weight: 400; + letter-spacing: 0; + } + } +} + +.gis-search-select { + .ant-select-selector { + background-color: rgba(36, 220, 247, 0.3) !important; + border: rgba(36, 220, 247, 1) 1px solid !important; + height: 24px !important; + } + + .ant-select-selection-item { + color: rgba(36, 220, 247, 1) !important; + line-height: 24px !important; + } + + .ant-select-arrow { + color: inherit; + color: rgba(36, 220, 247, 1) !important; } } \ No newline at end of file diff --git a/super-screen/client/src/sections/water-prevention/containers/data.js b/super-screen/client/src/sections/water-prevention/containers/data.js new file mode 100644 index 0000000..7e89bc1 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/containers/data.js @@ -0,0 +1,955 @@ +'use strict'; + +export const data = { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.882756, 28.515483 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.876061, 28.534185 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.897176, 28.545646 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.940155, 28.559386 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.874271, 28.412145 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.866911, 28.416826 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.835812, 28.597065 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.853493, 28.596462 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.965947, 28.445532 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.908495, 28.521435 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.861763, 28.530276 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.871634, 28.534348 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.90219, 28.55938 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.168147, 28.649128 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.16584, 28.648912 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 1 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.169467, 28.646074 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.92344, 28.561176 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.870911, 28.536749 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.876233, 28.512466 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.920693, 28.499945 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.958459, 28.511712 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.955369, 28.508393 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.954296, 28.560894 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.943288, 28.560309 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.868006, 28.41507 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.861397, 28.411485 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.840533, 28.595369 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.852592, 28.597178 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.970474, 28.448221 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.9688, 28.447702 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.865064, 28.557025 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.879959, 28.526732 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.881762, 28.562395 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.923647, 28.558626 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.856614, 28.595408 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.9484, 28.504994 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.941405, 28.502354 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.954022, 28.511066 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.953078, 28.520191 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.929474, 28.506013 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.070607, 28.798914 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.068397, 28.798176 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.143577, 28.657257 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.136303, 28.654546 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.110161, 28.654753 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.151446, 28.650158 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.939748, 28.551979 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.949189, 28.572182 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.92344, 28.561176 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.930306, 28.541122 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.949146, 28.559932 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.940155, 28.559386 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.864508, 28.41843 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.840533, 28.595369 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.860016, 28.61029 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.971493, 28.449494 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.881887, 28.559889 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.874334, 28.541946 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.864549, 28.553104 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 3 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.908495, 28.521435 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.950219, 28.55605 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.836713, 28.606522 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.899053, 28.538176 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.89871, 28.556874 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.884337, 28.522433 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.868287, 28.524017 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 4 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.868287, 28.524017 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.945584, 28.573991 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.896661, 28.520309 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.844304, 28.577308 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.927045, 28.540217 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.901982, 28.539614 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.949575, 28.558726 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.845039, 28.601888 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.851047, 28.605317 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.867527, 28.595181 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.857828, 28.594503 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 2 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 116.072222, 28.799295 + ] + } + }, + { + "type": "Feature", + "properties": { + "count": 5 + }, + "geometry": { + "type": "Point", + "coordinates": [ + 115.857007, 28.607604 + ] + } + }, + ] +} \ No newline at end of file diff --git a/super-screen/client/src/sections/water-prevention/containers/gis.js b/super-screen/client/src/sections/water-prevention/containers/gis.js new file mode 100644 index 0000000..dbd672a --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/containers/gis.js @@ -0,0 +1,530 @@ +import React, { useEffect, useState } from 'react'; +import { connect } from 'react-redux'; +import { render } from 'react-dom'; +import { data as heatmapData } from './data' +import './gis.less' +const MAPDOMID = 'fs-amap-container1'; +let map = null; +let heatmap = null; +let loca = null; +let interval = null; +const MARKER_IMG_NAME = { + markergreen: '回迁房', + markerblue: '城中村', + markeryellow: '廉租房', +} +function Map(props) { + const [delay, setDelay] = useState(true) + const [tab, setTab] = useState('overview') + // 地图初始化 + const loadMap = () => { + // 图片图层 实现瓦片地图中国地图样式 bounds 第一个点为左下角 第二个点为右上角 + const imageLayer = new AMap.ImageLayer({ + url: '/assets/images/map1.svg', + bounds: new AMap.Bounds( + [115.800221, 28.225659], + [116.334849, 28.973298], + ), + zooms: [3, 14], + }); + + map = new AMap.Map(MAPDOMID, { + center: [116.054664, 28.538966], + zoomEnable: true, + dragEnable: true, + viewMode: '3D', + pitch: 22.9, + labelzIndex: 130, + zoom: 10.3, + cursor: 'pointer', + mapStyle: 'amap://styles/300b147a96946a4f1c1b1b8eb1f92f76', + layers: [ + AMap.createDefaultLayer(), + imageLayer, + ], + }); + + map.on('complete', () => { + setTimeout(() => { + setDelay(false) + }, 1500); + }); + + map.on('click', (e) => { + if (!e && !e.lnglat) { + return + } + + const zoom = map.getZoom(); + const pitch = map.getPitch(); + const center = map.getCenter(); + const Rotation = map.getRotation(); + console.log('zoom' + zoom) + console.log('pitch' + pitch) + console.log('center' + center) + console.log('Rotation' + Rotation) + console.log('e.lnglat' + e.lnglat) + }) + + loca = new Loca.Container({ map: map }) + createText() + + }; + + const createText = () => { + var text = new AMap.Text({ + text: '南昌县', + anchor: 'center', // 设置文本标记锚点 + draggable: false, + // cursor: 'pointer', + zooms: [3, 11], + style: { + 'padding': '.75rem 1.25rem', + 'margin-bottom': '1rem', + 'border-radius': '.25rem', + 'background-color': 'rgba(238,77,90,0.001)', + 'width': '8rem', + 'border-width': 0, + //'box-shadow': '0 2px 6px 0 rgba(255, 255, 255, .1)', + 'text-align': 'center', + 'font-size': '14px', + 'color': '#AFEFFF', + 'opacity': 1, + // 'font-weight': 'bold' + }, + position: [115.934664, 28.538966] + }); + text.setMap(map); + + } + const drawBounds = () => { + let district = null; + let polygons = []; + //加载行政区划插件 + if (!district) { + //实例化DistrictSearch + let opts = { + subdistrict: 0, //获取边界不需要返回下级行政区 + extensions: 'all', //返回行政区边界坐标组等具体信息 + level: 'district' //查询行政级别为 市 + }; + district = new AMap.DistrictSearch(opts); + } + //行政区查询 + district.setLevel('district') + district.search('南昌县', function (status, result) { + map.remove(polygons)//清除上次结果 + polygons = []; + let bounds = result.districtList[0].boundaries; + if (bounds) { + for (let i = 0, l = bounds.length; i < l; i++) { + //生成行政区划polygon + let polygon = new AMap.Polygon({ + strokeWeight: 1, + path: bounds[i], + fillOpacity: 0.4, + fillColor: '#1F2F4D', + strokeColor: '#DE7B35', + fillOpacity: 0.35, //填充透明度 + }); + polygons.push(polygon); + } + } + map.add(polygons) + // map.setFitView(polygons);//视口自适应 + }); + } + + // 初始化GIS 组件销毁清空定时器 + useEffect(() => { + loadMap(); + }, []); + + 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], + }); + + 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) + + } + }); + } 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) + }) + }) + + 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) => { + 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) + }); + + 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}`)) { + render(
+
{ + map.setCenter([115.922069, 28.554867]) + map.clearInfoWindow(); + }} /> +
+ 小区名称 + {x.name} +
+
+ 人流量 + 123次 + 房龄 + 9年 +
+
+ 租赁中房屋 + 165套 +
+
+ 网格员 + 张三 +
+
+ 手机号码 + 15765845845 +
+ +
人流量较大,确认是否安装消防设施?
+
+
+
+
+
, + document.getElementById(`alarmcontentid${x.name}`)); + } + }, 50) + }) + }) + } + + const renderLeftTop = () => { + return tab == 'person' ? +
+
区域总人数
+
455
+ +
新生儿总数
+
45
+ +
老人总数
+
45
+
: +
+
租赁房屋总数
+
4556
+ +
回迁房总数
+
4556
+ +
城中村总数
+
4556
+ +
廉租房
+
4556
+ +
+ } + + const renderRightBottom = () => { + return
+
+
+ 廉租房 +
+
+
+ 回迁房 +
+
+
+ 城中村 +
+
+ } + + return ( + <> + {/* 延缓加载遮罩 */} + {delay &&
+
} + + {/* 地图容器 */} +
+ {map && renderMarkers()} + {map && renderAlarms()} + + {/* 底部按钮 */} + {!delay && [ + { name: '房屋分布', tab: 'overview' }, + // { name: '人口分布', tab: 'person' }, + { name: '基础设施', tab: 'emergency' } + ].map((s, index) => { + return
{ + setTab(s.tab) + props.changeTab(s.tab) + }} + > +
+
{s.name}
+
+ }) + } + + {/* 左上角图例 */} + {renderLeftTop()} + {renderRightBottom()} + {/* 四周遮罩 */} +
+
+
+
+ + ); +} + +export default connect()(Map); diff --git a/super-screen/client/src/sections/water-prevention/containers/gis.less b/super-screen/client/src/sections/water-prevention/containers/gis.less new file mode 100644 index 0000000..2e3de89 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/containers/gis.less @@ -0,0 +1,434 @@ +.gis-left { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 20%; + background: linear-gradient(270deg, rgba(0, 19, 46, 0) 0%, #000000 100%); +} + +.gis-right { + position: absolute; + right: 0; + top: 0; + height: 100%; + width: 20%; + background: linear-gradient(90deg, rgba(0, 19, 46, 0) 0%, #000000 100%); +} + +.gis-top { + position: absolute; + left: 0; + top: 0; + height: 5%; + width: 100%; + background: linear-gradient(0deg, rgba(0, 19, 46, 0) 0%, #000000 100%); +} + +.gis-bottom { + position: absolute; + left: 0; + bottom: 0; + height: 10%; + width: 100%; + background: linear-gradient(180deg, rgba(0, 19, 46, 0) 0%, #000000 100%); +} + +.water-gis-button1 { + position: absolute; + left: 39%; + bottom: -5%; + font-family: YouSheBiaoTiHei; + font-size: 12px; + color: #ECF7FF; + letter-spacing: 0; + width: 76.95px; + text-align: center; + cursor: pointer; + z-index: 999; + + .button_img { + background: url('/assets/images/homePage/communtity/home.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + width: 76.95px; + height: 64px; + } + + .button_img_select { + background: url('/assets/images/homePage/communtity/homeselect.png'); + } + + +} + + +.water-gis-button2 { + position: absolute; + left: 57%; + bottom: -5%; + font-family: YouSheBiaoTiHei; + font-size: 12px; + color: #ECF7FF; + letter-spacing: 0; + width: 76.95px; + text-align: center; + cursor: pointer; + z-index: 999; + + .button_img { + background: url('/assets/images/homePage/communtity/devicebutton.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + width: 76.95px; + height: 64px; + } + + .button_img_select { + background: url('/assets/images/homePage/communtity/devicebuttonselect.png'); + } + + +} + +.gis-infowindow { + width: 302px; + height: 420px; + background: url('/assets/images/homepage/communtity/infowindowbg.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 { + height: 35px; + background-image: linear-gradient(180deg, #0555a791 0%, #022a6f91 100%); + width: 93%; + display: flex; + align-items: center; + padding-left: 20px; + + .gis_title { + font-family: SourceHanSansCN-Regular; + font-weight: 400; + font-size: 14px; + color: #C3E6FF; + letter-spacing: 0; + margin-right: 12px; + } + + .gis_text { + font-family: SourceHanSansCN-Regular; + font-weight: 400; + font-size: 14px; + color: #FFFFFF; + letter-spacing: 0; + line-height: 21px; + } + } +} + +.personinfowindow { + width: 302px; + height: 420px; + background: url('/assets/images/homepage/communtity/personinfowindow.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 { + height: 35px; + background-image: linear-gradient(180deg, #0555a791 0%, #022a6f91 100%); + width: 93%; + display: flex; + align-items: center; + padding-left: 20px; + + .gis_title { + font-family: SourceHanSansCN-Regular; + font-weight: 400; + font-size: 14px; + color: #C3E6FF; + letter-spacing: 0; + margin-right: 12px; + } + + .gis_text { + font-family: SourceHanSansCN-Regular; + font-weight: 400; + font-size: 14px; + color: #FFFFFF; + letter-spacing: 0; + line-height: 21px; + } + } +} + + +.gis-infowindow-alarm { + background: url('/assets/images/homepage/communtity/alarminfowindow.png') no-repeat; + height: 432px; + width: 311px; + padding-top: 107px; + + .gis_exit { + cursor: pointer; + position: absolute; + right: 2px; + top: 15px; + width: 30.75px; + height: 23px; + background: url('/assets/images/homepage/communtity/exitalarm.png') no-repeat; + background-size: 100% 100%; + } + + .gis_item { + margin-bottom: 10px; + height: 35px; + background-image: linear-gradient(180deg, #a7050591 0%, #48010191 100%); + ; + + } + + .confirm_text { + font-family: SourceHanSansCN-Medium; + font-weight: 500; + font-size: 16px; + color: #FFFFFF; + letter-spacing: 0; + line-height: 21px; + } + + .alarm_confirm { + width: 100%; + display: flex; + justify-content: space-around; + margin-top: 15px; + + .alarm_cancel { + width: 81px; + height: 30px; + background-image: linear-gradient(180deg, #C50000 1%, #b600006e 52%, #C50000 100%); + box-shadow: inset 0 1px 14px 0 #ff2b2b59; + border-radius: 4px; + + font-family: SourceHanSansCN-Medium; + font-weight: 500; + font-size: 14px; + color: #FFE8E8; + text-align: center; + line-height: 30px; + + background: url('/assets/images/homepage/communtity/alarmcancel.png') no-repeat; + background-size: 100% 100%; + cursor: pointer; + } + + .alarm_ok { + text-align: center; + line-height: 30px; + width: 81px; + height: 30px; + background-image: linear-gradient(180deg, #C50000 1%, #b600006e 52%, #C50000 100%); + box-shadow: inset 0 1px 14px 0 #ff2b2b59; + border-radius: 4px; + font-family: SourceHanSansCN-Medium; + font-weight: 500; + font-size: 14px; + color: #FFFFFF; + cursor: pointer; + } + } + + .alarm_button { + width: 103px; + height: 30px; + margin-top: 24px; + display: flex; + align-items: center; + justify-content: center; + font-family: SourceHanSansCN-Medium; + font-weight: 500; + font-size: 14px; + color: #FFFFFF; + letter-spacing: 0; + background: url('/assets/images/homepage/communtity/alarmbutton.png') no-repeat; + background-size: 100% 100%; + margin-left: 89px; + cursor: pointer; + + .alarm_icon { + width: 18px; + height: 18px; + background: url('/assets/images/homepage/communtity/alarmicon.png') no-repeat; + background-size: 100% 100%; + } + } +} + + +.home_left { + position: absolute; + left: 26%; + top: 3%; + z-index: 999; + font-family: YouSheBiaoTiHei; + font-size: 16px; + color: #FFFFFF; + letter-spacing: 1.33px; + text-shadow: -2px 0 0 #0C5FA6; + + .hometotalbg { + width: 126.45px; + height: 26.23px; + padding-left: 24px; + background: url('/assets/images/homepage/communtity/total.png') no-repeat; + background-size: 100% 100%; + } + + .home_total_number { + font-family: D-DIN-Italic; + font-weight: Italic; + font-size: 28px; + color: #EAF2FF; + letter-spacing: 0; + margin-left: 40px; + } + + .hqtotal { + width: 126.45px; + height: 26.23px; + padding-left: 24px; + background: url('/assets/images/homepage/communtity/hqtotal.png') no-repeat; + background-size: 100% 100%; + } + + .cztotal { + width: 126.45px; + height: 26.23px; + padding-left: 24px; + background: url('/assets/images/homepage/communtity/cztotal.png') no-repeat; + background-size: 100% 100%; + } + + .lztotal { + width: 126.45px; + height: 26.23px; + padding-left: 24px; + background: url('/assets/images/homepage/communtity/lztotal.png') no-repeat; + background-size: 100% 100%; + } + +} + +.home_right { + position: absolute; + right: 26%; + bottom: 7%; + z-index: 999; + font-family: YouSheBiaoTiHei; + font-size: 14px; + background: #021d33ad; + // border: 1px solid rgba(2, 29, 51, 0.68); + padding: 7px 14px 7px 14px; + border: 1px solid; + border-image: linear-gradient(133deg, rgba(0, 197, 255, 0.53) 0%, rgba(0, 138, 255, 0.62)) 1; + + ._lz { + display: flex; + align-items: center; + + ._icon { + display: inline-block; + width: 15px; + height: 15px; + background: url('/assets/images/homepage/communtity/lzicon.png') no-repeat; + background-size: 100% 100%; + margin-right: 4px; + } + + span { + font-family: YouSheBiaoTiHei; + font-size: 14px; + letter-spacing: 0; + background: linear-gradient(180deg, rgba(255, 255, 255, 1) 1%, rgba(250, 196, 110, 1) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + } + + ._hq { + display: flex; + align-items: center; + margin-top: 10px; + + ._icon { + display: inline-block; + width: 15px; + height: 15px; + background: url('/assets/images/homepage/communtity/hqicon.png') no-repeat; + background-size: 100% 100%; + margin-right: 4px; + } + + span { + font-family: YouSheBiaoTiHei; + font-size: 14px; + background: linear-gradient(180deg, rgba(255, 255, 255, 1) 1%, rgba(36, 220, 247, 1) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + letter-spacing: 0; + } + } + + ._cz { + display: flex; + align-items: center; + margin-top: 10px; + + ._icon { + display: inline-block; + width: 15px; + height: 15px; + background: url('/assets/images/homepage/communtity/czicon.png') no-repeat; + background-size: 100% 100%; + margin-right: 4px; + } + + span { + font-family: YouSheBiaoTiHei; + font-size: 14px; + background: linear-gradient(180deg, rgba(255, 255, 255, 1) 1%, rgba(1, 140, 255, 1) 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + letter-spacing: 0; + } + } +} \ No newline at end of file diff --git a/super-screen/client/src/sections/water-prevention/containers/homePage.js b/super-screen/client/src/sections/water-prevention/containers/homePage.js index ef570f6..4c3d26b 100644 --- a/super-screen/client/src/sections/water-prevention/containers/homePage.js +++ b/super-screen/client/src/sections/water-prevention/containers/homePage.js @@ -1,60 +1,69 @@ import React, { useEffect, useState } from 'react' import { connect } from 'react-redux'; import { push } from 'react-router-redux'; -import AccessData from '../components/accessData' -import AlarmList from '../components/alarmList' -import DataShare from '../components/dataShare' -import DataTop5 from '../components/dataTop5' -import HotspotData from '../components/hotspotData' -import NodeResource from '../components/nodeResource' -import AbnormalMonitoring from '../components/abnormalMonitoring' -import CenterTop from '../components/centerTop' +import LeftTop from '../components/left-top' +import LeftBottom from '../components/left-bottom' +import RightTop from '../components/right-top' +import RightBottom from '../components/right-bottom' + +import EmergencyLeftTop from '../components/emergency-left-top' +import EmergencyLeftBottom from '../components/emergency-left-bottom' +import EmergencyRightTop from '../components/emergency-right-top' +import EmergencyRightBottom from '../components/emergency-right-bottom' + +import Gis from './gis'; import './style.less' function homePage(props) { const { dispatch } = props; - const childStyle = { height: '32%', color: '#fff', marginBottom: 17 } + const childStyle = { height: '49%', color: '#fff', marginBottom: 17 } const cardHeight = document.body.clientHeight * 0.896 * 0.32 const cardContentHeight = cardHeight - 42 - 13 - return
-
-
{ dispatch(push('/metadataManagement/latestMetadata')) }} className='_exit' >
进入后台
-
-
-
-
- -
-
- -
-
- + const [tab, setTab] = useState('overview');// overview emergency + const SCREEN_COMPONENTS = { + overview: { leftTop: LeftTop, leftBottom: LeftBottom, rightTop: RightTop, rightBottom: RightBottom }, + emergency: { leftTop: EmergencyLeftTop, leftBottom: EmergencyLeftBottom, rightTop: EmergencyRightTop, rightBottom: EmergencyRightBottom } + } + const currentContainer = SCREEN_COMPONENTS[tab]; + return <> +
+
+
+ 水务防汛实时监测预警系统
+
{ dispatch(push('/metadataManagement/latestMetadata')) }} className='_exit' >返回平台
-
-
- -
-
- +
+
+
+ +
+
+ +
-
-
-
-
- -
-
- -
-
- +
+ { + setTab(e) + }} + /> +
+
+
+
+ +
+
+ +
-
-
+ +
+ + } diff --git a/super-screen/client/src/sections/water-prevention/containers/style.less b/super-screen/client/src/sections/water-prevention/containers/style.less index 129aafd..2cc8380 100644 --- a/super-screen/client/src/sections/water-prevention/containers/style.less +++ b/super-screen/client/src/sections/water-prevention/containers/style.less @@ -4,117 +4,40 @@ position: absolute; top: 0; left: 0; - background: url('/assets/images/homePage/enter/bg.png'); + background: url('/assets/images/homePage/communtity/bg.png'); background-repeat: no-repeat; background-size: 100% 100%; overflow: hidden; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; + // display: flex; + // flex-direction: column; + // justify-content: center; + // align-items: center; padding-top: 5%; - ._enter_row1 { - height: 302px; - - ._row1_item { - width: 1434px; - height: 241px; - // opacity: 0.8; - background: url('/assets/images/homePage/enter/row1.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - cursor: pointer; - } - - ._row1_item:hover { - width: 1434px; - height: 302.6px; - background: url('/assets/images/homePage/enter/row1-select.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - cursor: pointer; - } - } - - ._enter_row2 { - height: 427px; - display: flex; + .water_title_text { + position: absolute; + top: 0%; width: 100%; - padding-left: 4%; - - ._row2_item1 { - width: 454px; - height: 371px; - // opacity: 0.8; - background: url('/assets/images/homePage/enter/row2-1.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - cursor: pointer; - margin-left: 60px; - } - - ._row2_item1:hover { - background: url('/assets/images/homePage/enter/row2-1-select.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - cursor: pointer; - } - - ._row2_item2 { - margin-left: 60px; - width: 454px; - height: 371px; - // opacity: 0.8; - background: url('/assets/images/homePage/enter/row2-2.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - cursor: pointer; - } - - ._row2_item2:hover { - background: url('/assets/images/homePage/enter/row2-2-select.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - cursor: pointer; - } - - ._row2_item3 { - margin-left: 60px; - width: 454px; - height: 371px; - // opacity: 0.8; - background: url('/assets/images/homePage/enter/row2-3.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - cursor: pointer; - } + height: 62px; + font-family: YouSheBiaoTiHei; + font-size: 48px; + color: #FFFFFF; + letter-spacing: 1px; + z-index: 300; + display: flex; + align-items: center; + justify-content: center; - ._row2_item3:hover { - background: url('/assets/images/homePage/enter/row2-3-select.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - cursor: pointer; + ._title_dot { + display: inline-block; + width: 8px; + height: 8px; + background-image: linear-gradient(180deg, #FFFFFF 0%, #0d71ef00 100%); + margin-left: 14px; + margin-right: 14px; + border-radius: 4px; } - } - ._enter_title { - position: absolute; - top: 4%; - left: 3%; - width: 575.35px; - height: 78px; - background: url('/assets/images/homePage/enter/title.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - } - - ._title { - width: 100%; - height: 88px; - background: url('/assets/images/homePage/bigscreen/top.png'); - background-repeat: no-repeat; - background-size: 100% 100%; } ._exit { @@ -124,35 +47,33 @@ cursor: pointer; color: #C8F0FF; display: flex; - - ._icon { - display: inline-block; - width: 28px; - height: 28px; - background: url('/assets/images/homePage/bigscreen/exit.png'); - background-repeat: no-repeat; - background-size: 100% 100%; - margin-right: 3px; - } + width: 102px; + height: 33px; + background: url('/assets/images/homePage/bigscreen/exit.png'); + background-repeat: no-repeat; + background-size: 100% 100%; + padding-left: 35px; + align-items: center; + z-index: 400; } .homepage-left { width: 21.8%; - height: 89.6%; + height: 84.6%; position: absolute; - top: 8.2%; + top: 10.1%; z-index: 300; } .homepage-center { - width: 49.16%; - height: 89.6%; + width: 93.9%; + height: 84%; position: absolute; - bottom: 2.4%; - left: 25.5%; + top: 10.4%; + left: 58px; padding-left: 16px; padding-right: 16px; - z-index: 400; + z-index: 200; ._top { margin-top: 5%; @@ -165,11 +86,11 @@ } .homepage-left-left { - left: 48px; + left: 58px; } .homepage-left-right { - right: 48px; + right: 58px; } } @@ -321,4 +242,62 @@ margin-right: 11px; margin-left: 10px; } +} + +.gis { + position: absolute; + width: 100vw; + height: calc(~"100% - 114px"); + left: 0; + top: 114px; + z-index: 0; + display: flex; + justify-content: center; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* flex 基本布局样式 */ +.flex-column { + display: flex; + flex-direction: column; +} + +.flex-row { + display: flex; + flex-direction: row; +} + +.flex-content-between { + justify-content: space-between; +} + +.flex-content-around { + justify-content: space-around; +} + +.flex-content-start { + justify-content: flex-start; +} + +.flex-content-end { + justify-content: flex-end; +} + +.flex-item-center { + align-items: center; +} + +.flex-item-start { + align-items: flex-start; +} + +.flex-item-end { + align-items: flex-end; +} + +.flex-item-stretch { + align-items: stretch; } \ No newline at end of file