diff --git a/packages/biz/src/RealTimeMonitor/RealTimeMonitor.tsx b/packages/biz/src/RealTimeMonitor/RealTimeMonitor.tsx index e99db7e..6cc2223 100644 --- a/packages/biz/src/RealTimeMonitor/RealTimeMonitor.tsx +++ b/packages/biz/src/RealTimeMonitor/RealTimeMonitor.tsx @@ -35,6 +35,7 @@ interface RealTimeMonitorProps { size: ISize; setSize: React.Dispatch> maxRecordCount?: number; + warningImgStyle?: React.CSSProperties; } export const RealTimeMonitor: React.FC = (props) => { @@ -55,14 +56,15 @@ export const RealTimeMonitor: React.FC = (props) => { isRecordListLoading, size, setSize, - maxRecordCount + maxRecordCount, + warningImgStyle, } = props const toggleRef = useRef() const componentName = getPrefixCls('biz-real-time-monitor', customizePrefixCls); return (
- = (props) => { recordListTitle="监控预警记录" maxHeight={toggleRef.current?.offsetHeight} maxRecordCount={maxRecordCount} + imgStyle={warningImgStyle} />
); diff --git a/packages/biz/src/RealTimeMonitor/components/WarningRecordList/WarningRecordList.tsx b/packages/biz/src/RealTimeMonitor/components/WarningRecordList/WarningRecordList.tsx index 3947e2e..75a2c2b 100644 --- a/packages/biz/src/RealTimeMonitor/components/WarningRecordList/WarningRecordList.tsx +++ b/packages/biz/src/RealTimeMonitor/components/WarningRecordList/WarningRecordList.tsx @@ -51,7 +51,7 @@ const WarningRecordList: React.FC = (props) => { maxRecordCount = 10 } = props return ( -
+
{recordListTitle}
{ @@ -62,14 +62,14 @@ const WarningRecordList: React.FC = (props) => { : (dataSource?.length) > 0 ? {dataSource?.map((record, index) => { - if (index > maxRecordCount -1) return + if (index > maxRecordCount - 1) return return ( { onRecordClick?.(record) }} selectedRecordId={selectedRecordId} - cardStyle={{ width: 300, height: 264, ...cardStyle }} - imgStyle={{ width: 280, height: 169, ...imgStyle }} + cardStyle={{ ...cardStyle }} + imgStyle={{ ...imgStyle }} />) } )} diff --git a/packages/biz/src/RealTimeMonitor/components/WarningRecordList/index.less b/packages/biz/src/RealTimeMonitor/components/WarningRecordList/index.less index 444ff42..bf147cf 100644 --- a/packages/biz/src/RealTimeMonitor/components/WarningRecordList/index.less +++ b/packages/biz/src/RealTimeMonitor/components/WarningRecordList/index.less @@ -16,7 +16,7 @@ .body { padding: 10px; overflow-y: auto; - // overflow-x: hidden; + overflow-x: hidden; flex: 1; } } \ No newline at end of file diff --git a/packages/biz/src/RealTimeMonitor/components/WindowToggle/WindowToggle.tsx b/packages/biz/src/RealTimeMonitor/components/WindowToggle/WindowToggle.tsx index a4675dd..902a47d 100644 --- a/packages/biz/src/RealTimeMonitor/components/WindowToggle/WindowToggle.tsx +++ b/packages/biz/src/RealTimeMonitor/components/WindowToggle/WindowToggle.tsx @@ -1,16 +1,14 @@ import React from 'react'; import VideoPlayerCard from '../../../VideoPlayerCard'; import { VideoPlayerCardProps } from '../../../VideoPlayerCard'; -import { Segmented, theme } from 'antd'; +import { Row, Col, Segmented, theme } from 'antd'; import { AppstoreOutlined, BarsOutlined } from '@ant-design/icons'; import { pxToRem } from '@zhst/func' import './index.less' - export type ISize = 'large' | 'small' interface WindowToggleProps { - dataSource?: VideoPlayerCardProps[]; handleWindowClick?: (key?: string) => void; handleCloseButtonClick?: (key?: string) => void; @@ -25,50 +23,73 @@ export const WindowToggle: React.FC = (props) => { const { dataSource = [], handleWindowClick, handleCloseButtonClick, selectedWindowKey, size = "large", setSize, toggleRef } = props const { useToken } = theme const { token } = useToken() - const getLabelStyle = (isSelected: boolean) => ({ padding: `0 ${pxToRem("11px")}`, background: "#fff", ...(isSelected ? { background: token.colorPrimary, color: '#fff' } : {}), }); - return (
{/* 切换按钮 */}
-
}, - { value: 'small', label:
}, - ]} - onChange={(value) => { - // 当一个窗口时 默认 selectedkey 第一条数据的 windowkey - if (value === 'large' && dataSource.length > 0) { - const { windowKey } = dataSource[0] - handleWindowClick?.(windowKey) - } - setSize(value as ISize) - }} - /> +
}, + { value: 'small', label:
}, + ]} + onChange={(value) => { + // 当一个窗口时 默认 selectedkey 第一条数据的 windowkey + if (value === 'large' && dataSource.length > 0) { + const { windowKey } = dataSource[0] + handleWindowClick?.(windowKey) + } + setSize(value as ISize) + }} + />
- { - dataSource?.map((item, index) => { - if (size === "large" && index > 0) return - return ( - ) - }) - } + {/* 设置栅格间距 */} + { + size === "large" ? + <> + { + dataSource?.map((item, index) => { // 仅显示前四个元素,即两行两列 + if (index > 0) return null + return ( + + + ) + }) + + } + + : <> + {dataSource?.map((item) => { + return ( + + + + ); + })} + } +
); diff --git a/packages/biz/src/RealTimeMonitor/components/WindowToggle/index.less b/packages/biz/src/RealTimeMonitor/components/WindowToggle/index.less index 61c77bd..2dec812 100644 --- a/packages/biz/src/RealTimeMonitor/components/WindowToggle/index.less +++ b/packages/biz/src/RealTimeMonitor/components/WindowToggle/index.less @@ -29,17 +29,16 @@ } .body { - flex: 1; - width: 100%; background-color: #E5EAEC; - padding: 10px; + padding: 20px; box-sizing: border-box; - display: flex; - flex-wrap: wrap; - justify-content: space-between; - >div { - margin: 10px; + .sm-card:nth-child(odd) { + padding-right: 10px; + } + + .sm-card:nth-child(even) { + padding-left: 10px; } } } \ No newline at end of file diff --git a/packages/biz/src/RealTimeMonitor/demo/base.tsx b/packages/biz/src/RealTimeMonitor/demo/base.tsx index 5772c23..3d271fa 100644 --- a/packages/biz/src/RealTimeMonitor/demo/base.tsx +++ b/packages/biz/src/RealTimeMonitor/demo/base.tsx @@ -3,6 +3,7 @@ import React, { useState } from 'react'; import { IRecord, RealTimeMonitor, VideoPlayerCardProps, useViewLargerImageModal } from '@zhst/biz'; import { videoData, warningData } from './mock'; import { Space } from 'antd'; +import { pxToRem } from '@zhst/func'; import dayjs from 'dayjs' import './index.less' @@ -87,7 +88,7 @@ export default () => { setTimeout(() => { // 对后端返回数据进行处理 组装一套符合属性的 数据 // videoSrc : videoData.videoSrc - const newVideoData: VideoPlayerCardProps = { imageKey: videoData.imageKey, title: videoData.title, odRect: videoData.odRect} + const newVideoData: VideoPlayerCardProps = { imageKey: videoData.imageKey, title: videoData.title, odRect: videoData.odRect } setVideoDataSource((pre) => { const newVideoDataSource: VideoPlayerCardProps[] = pre.map((item) => { // 传给 选中的视频窗口 @@ -153,6 +154,7 @@ export default () => { recordListTitle="监控预警记录" size={size} setSize={setSize} + warningImgStyle={{ width: `${pxToRem("280px")}`, height: `${pxToRem("169px")}` }} /> diff --git a/packages/biz/src/VideoPlayerCard/VideoPlayerCard.tsx b/packages/biz/src/VideoPlayerCard/VideoPlayerCard.tsx index ccf917c..946e00b 100644 --- a/packages/biz/src/VideoPlayerCard/VideoPlayerCard.tsx +++ b/packages/biz/src/VideoPlayerCard/VideoPlayerCard.tsx @@ -3,7 +3,6 @@ import { theme } from 'antd/lib'; import { ConfigProvider, VideoPlayer, CropperImage, type VideoViewRef, } from '@zhst/meta'; import React, { useState, useEffect, ReactNode, useRef, useContext } from 'react'; import { CloseOutlined, LoadingOutlined } from '@ant-design/icons'; -import { pxToRem } from '@zhst/func' import './index.less' export interface VideoPlayerCardProps { prefixCls?: string; @@ -32,7 +31,6 @@ export interface VideoPlayerCardProps { export const VideoPlayerCard: React.FC = (props) => { - const { ConfigContext } = ConfigProvider; const { getPrefixCls } = useContext(ConfigContext); const { prefixCls: customizePrefixCls, showType, imageKey, videoSrc, cardProps, isWindowLoading, errorReasonText, size, title, handleCloseButtonClick, handleWindowClick, windowKey, selectedWindowKey = '', odRect = [] } = props; @@ -49,10 +47,8 @@ export const VideoPlayerCard: React.FC = (props) => { border: `2px solid ${token.colorPrimary}`, boxShadow: " 0px 2px 9px 0px rgba(0,0,0,0.16)" } const cardStyle: React.CSSProperties = { - ...(size === 'large' ? { height: `${pxToRem("931px")}` } : { height: `${pxToRem("456px")}` , cursor: 'pointer' }), ...(size === 'small' && selectedWindowKey === windowKey ? selectedBorderStyle : {}) }; - const videoPlayerCardStyle = size === 'small' ? { width: `calc(50% - ${pxToRem("20px")})` } : { flex: 1 } useEffect(() => { if (!isWindowLoading && (videoSrc || imageKey)) { let contentElement: JSX.Element | null = null; @@ -64,7 +60,6 @@ export const VideoPlayerCard: React.FC = (props) => { } else if (imageKey) { contentElement = ( -
= (props) => { url={imageKey} />
- ); } setCardContent(contentElement); @@ -80,10 +74,10 @@ export const VideoPlayerCard: React.FC = (props) => { setCardContent(null) } }, [showType, imageKey, videoSrc, isWindowLoading]); - return ( -
{ handleWindowClick?.(windowKey) }} style={videoPlayerCardStyle}> +
{ handleWindowClick?.(windowKey) }} >
{title}
@@ -102,7 +96,7 @@ export const VideoPlayerCard: React.FC = (props) => { {cardContent} ) : ( -
+
{ isWindowLoading ?
diff --git a/packages/biz/src/VideoPlayerCard/index.less b/packages/biz/src/VideoPlayerCard/index.less index 881369d..194a46b 100644 --- a/packages/biz/src/VideoPlayerCard/index.less +++ b/packages/biz/src/VideoPlayerCard/index.less @@ -1,4 +1,21 @@ .zhst-biz-video-player-card { + &-large { + height: 931px; + } + + &-small { + height: 456px; + cursor: pointer + } + + &-error { + background-color: #000; + height: 100%; + display: flex; + padding: 20px; + box-sizing: border-box; + } + .ant-card-head { padding: 0 20px; } diff --git a/packages/biz/src/ViewLargerImageModal/ViewLargerImageModal.tsx b/packages/biz/src/ViewLargerImageModal/ViewLargerImageModal.tsx index d7284e3..6904e8d 100644 --- a/packages/biz/src/ViewLargerImageModal/ViewLargerImageModal.tsx +++ b/packages/biz/src/ViewLargerImageModal/ViewLargerImageModal.tsx @@ -1,6 +1,5 @@ import React, { useImperativeHandle, useRef, useState, forwardRef, useContext } from 'react'; -import { Modal, ModalProps, Space, SpaceProps } from 'antd'; -import theme from 'antd/lib/theme'; +import { Modal, ModalProps, Space, SpaceProps, theme } from 'antd'; import { DownloadOutlined } from '@ant-design/icons'; import { ConfigProvider, CropperImage } from '@zhst/meta'; @@ -44,8 +43,6 @@ export const ViewLargerImageModal = forwardRef(false); @@ -85,14 +82,13 @@ export const ViewLargerImageModal = forwardRef -
- - +
+
{warningData?.map(({ label, value }) => (