9.28 1、异常告警优化 2、大屏,评审中项目,供应商名称加密 3、评委会设置,评标室预约优化

This commit is contained in:
jl-zhoujl2
2022-09-28 14:51:23 +08:00
parent 2f1be12fa5
commit 8e23c61ea2
12 changed files with 1312 additions and 952 deletions

View File

@ -13,6 +13,7 @@ interface BidEvalAppointmentProps {
onSubmit: (value: any) => void;
reload: () => void;
values: any;
initValue: any;//预约时间初始值
type: string; //0-选择评标室 1-修改预约 2-重评预约评标室
}
@ -54,7 +55,7 @@ export const proviceEnum = {
const modalHeight = window.innerHeight * 96 / 100;
const BidEvalAppointment: React.FC<BidEvalAppointmentProps> = (props) => {
const { modalVisible, onCancel, onSubmit, reload, values, type } = props;
const { modalVisible, onCancel, onSubmit, reload, values, initValue, type } = props;
const actionRef = useRef<ActionType>();
const [form] = Form.useForm();
//项目id
@ -190,6 +191,10 @@ const BidEvalAppointment: React.FC<BidEvalAppointmentProps> = (props) => {
setDisabledMap({});
}, [values])
useEffect(() => {
initValue && form.setFieldsValue({ ...initValue, reserveStartDate: initValue.startTime, reserveEndDate: initValue.endTime });
}, [initValue, modalVisible])
useEffect(() => {
selectedRowKeys.length > 0 && getDisabledTime(selectedRowKeys);
}, [selectedRowKeys])
@ -301,7 +306,7 @@ const BidEvalAppointment: React.FC<BidEvalAppointmentProps> = (props) => {
rules={[{ required: true, message: '请选择' }]}
extra={<span style={{ color: "#b30000" }}> 7:00 ~ 18:00</span>}
>
<DatePicker showTime showNow={false} disabledDate={disabledDate} disabledTime={(current) => otherDisabledDateTime(current, disabledMap)} showMinute={false} showSecond={false} format={dateFormat} style={{ width: '100%' }} renderExtraFooter={() => "注:若时间被占用,则置灰不可选"} />
<DatePicker showTime showNow={false} disabledDate={disabledDate} disabledTime={(current) => otherDisabledDateTime(current, disabledMap, "startTime")} showMinute={false} showSecond={false} format={dateFormat} style={{ width: '100%' }} renderExtraFooter={() => <span style={{ color: '#b30000' }}></span>} />
</Form.Item>
</Col>
<Col span={12}>
@ -310,7 +315,7 @@ const BidEvalAppointment: React.FC<BidEvalAppointmentProps> = (props) => {
name="reserveEndDate"
rules={[{ required: true, message: '请选择' }]}
>
<DatePicker showTime showNow={false} disabledDate={disabledDate} disabledTime={(current) => otherDisabledDateTime(current, disabledMap)} showMinute={false} showSecond={false} format={dateFormat} style={{ width: '100%' }} renderExtraFooter={() => "注:若时间被占用,则置灰不可选"} />
<DatePicker showTime showNow={false} disabledDate={disabledDate} disabledTime={(current) => otherDisabledDateTime(current, disabledMap, "endTime")} showMinute={false} showSecond={false} format={dateFormat} style={{ width: '100%' }} renderExtraFooter={() => <span style={{ color: '#b30000' }}></span>} />
</Form.Item>
</Col>
<Col span={12}>

View File

@ -37,13 +37,13 @@ export const disabledDateTime = () => ({
disabledHours: () => [...range(0, 7), ...range(19, 24)],
});
//不可选小时(额外不可选)
export const otherDisabledDateTime = (current: any, disabledMap: any) => {
export const otherDisabledDateTime = (current: any, disabledMap: any, type: string) => {
let otherHour: any[] = range(0, 24);
if (current) {
otherHour = [];
if (Object.keys(disabledMap).length != 0) {
const time = moment(current).format("yyyy-MM-DD");
disabledMap[time] && (otherHour = [...disabledMap[time]]);
disabledMap[time] && (otherHour = [...disabledMap[time][type]]);
}
}
return ({

View File

@ -128,7 +128,8 @@ class manager extends PureComponent {
//评委会设置
onJurySet = (record) => {
this.savePageAndParams();
this.props.dispatch(routerRedux.push(`/ProjectLayout/JudgingPanel?roomId=${record.id}&secId=${record.sectionId}`))
history.push({ pathname: '/ProjectLayout/JudgingPanel', state: { roomId: record.id, secId: record.sectionId, openTime: record.openTime } });
// this.props.dispatch(routerRedux.push(`/ProjectLayout/JudgingPanel?roomId=${record.id}&secId=${record.sectionId}&openTime=${record.openTime}`));
}
//创建评审室
onCreateClick = async () => {

View File

@ -826,6 +826,10 @@ export default () => {
className="screen-table"
rowKey="id"
size="small"
scroll={{
y: 200,
scrollToFirstRowOnChange: true,
}}
dataSource={bidProjectData}
columns={evalColumn}
onRow={record => {

View File

@ -87,14 +87,6 @@
.screen-warn-list {
height: 67.4%;
margin-top: 0;
::-webkit-scrollbar {
display: none;
}
.ant-table-cell-scrollbar {
display: none;
}
}
.screen-graph-top {
@ -372,8 +364,8 @@
}
.screen-table {
margin-top: 0.5rem;
height: calc(100% - 40px - 0.5rem);
margin-top: 0.25rem;
height: calc(100% - 40px - 0.25rem);
overflow: hidden;
.ant-table-container table>thead>tr:first-child th:first-child {
@ -409,4 +401,12 @@
.ant-table-small .ant-table-thead>tr>th {
background-color: #045da8;
}
::-webkit-scrollbar {
display: none;
}
.ant-table-cell-scrollbar {
display: none;
}
}

View File

@ -1,10 +1,8 @@
import { Button, Col, Input, List, message, PaginationProps, Row, Tag, Tooltip } from "antd"
import moment from "moment";
import { Button, Col, Input, List, message, Row, Tag, Tooltip } from "antd"
import '../Home/style.less'
import './style.less';
import content_title from '@/assets/screen/content_title.png'
import React, { useEffect, useRef, useState } from "react"
import { LeftCircleOutlined, RightCircleOutlined } from "@ant-design/icons";
import { getMonitorList } from "./service";
import { isNotEmpty } from "@/utils/CommonUtils";
import { history } from "umi";
@ -139,15 +137,15 @@ const provinceList = [{
"provincesRemark": "新疆",
},];
const itemRender: PaginationProps['itemRender'] = (_, type, originalElement) => {
if (type === 'prev') {
return <LeftCircleOutlined className="pagination-icon" />;
}
if (type === 'next') {
return <RightCircleOutlined className="pagination-icon" />;
}
return originalElement;
};
// const itemRender: PaginationProps['itemRender'] = (_, type, originalElement) => {
// if (type === 'prev') {
// return <LeftCircleOutlined className="pagination-icon" />;
// }
// if (type === 'next') {
// return <RightCircleOutlined className="pagination-icon" />;
// }
// return originalElement;
// };
export const homeClick = () => {
history.push("/ElecMonitorScreen/Home");
}
@ -332,7 +330,9 @@ export default () => {
grid={{ gutter: 16, column: 3 }}
pagination={{
defaultPageSize: 6,
showSizeChanger: false,
onChange: onPageChange,
current: pageNo.current,
total: totalItem,
showTotal: (total, range) => `当前第 ${range[0]}-${range[1]} 条,共计 ${total}`,
// itemRender

View File

@ -476,6 +476,15 @@
.ant-pagination-prev {
margin-right: 0.5rem;
}
.ant-pagination-item-ellipsis {
color: #8de3f3;
}
.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon,
.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon {
color: #8de3f3;
}
}
}

View File

@ -1,4 +1,4 @@
import { Col, Radio, Row, Table, Tag, Tooltip, Image, Drawer } from "antd"
import { Col, Radio, Row, Table, Tooltip, Image, Drawer } from "antd"
import React, { useEffect, useRef, useState } from "react"
import { EarlyWarn, LocalTime, onCell, onHeaderCell } from "../Home";
import '../Home/style.less'
@ -6,13 +6,13 @@ import '../MonitorRoom/style.less'
import './style.less';
import warn_icon_01 from '@/assets/screen/warn_icon_01.png'
import warn_icon_02 from '@/assets/screen/warn_icon_02.png'
import { getBidRoomData, getCameraList, getExpertReports, getLookBackList } from "./service";
import { getAllStranger, getBidRoomData, getCameraList, getExpertReports, getLookBackList } from "./service";
import { bidStatusMap, homeClick, previousClick } from "../MonitorRoom";
import { getWarnData } from "../Home/service";
import ScreenVideoPlay from "@/components/ElecBidEvaluation/ScreenVideoPlay";
import { pictureDisplayPath } from "@/utils/DownloadUtils";
import { getURLInformation } from "@/utils/CommonUtils";
import { getDicData } from "@/utils/session";
import { getDicData, getSessionRoleData } from "@/utils/session";
const statusMap = ["未报道", "已报道"];
@ -126,6 +126,8 @@ export default (props: any) => {
const [caremaList, setCaremaList] = useState<any[]>([]);
//报道列表
const [expertList, setExpertList] = useState<any[]>([]);
//陌生人预警-进行中
const [strangerList, setStrangerList] = useState<any[]>([]);
//陌生人预警-回看
const [backStrangerList, setBackStrangerList] = useState<any[]>([]);
//人数预警-回看
@ -142,6 +144,8 @@ export default (props: any) => {
const zoomImg = useRef<any>(null);
//定时刷新间隔
const _time = 10000;
//当前登录人角色
const roleCode = getSessionRoleData()?.roleCode;
const onChange = (e: any) => {
setBtnSelect(e.target.value);
@ -182,7 +186,7 @@ export default (props: any) => {
getCaremaData(data);//获取监控点列表
if (data.status == "2") {//评标结束-回看
getBackList("2");//数量预警
getBackList("3");//陌生人预警
roleCode == "ebtp-watcher" && getBackList("3");//陌生人预警
}
}
})
@ -193,6 +197,7 @@ export default (props: any) => {
if (res?.code == 200) {
const data = res?.data;
setEarlyWarnData(data);
(roleCode == "ebtp-watcher" && data?.strangerDetails) && setStrangerList(data.strangerDetails.slice(0, 5));
}
})
}
@ -203,10 +208,6 @@ export default (props: any) => {
const data = res?.data;
setCaremaList(data);
if (data?.length > 0) {
//获取回看时间
// getCaremaBackList(monitorId).then(response => {
// if (response?.code == 200) {
// const backData = response?.data;
setCameraSelect(data[0].id);
setCameraParams(data[0].platform);
setTimeout(() => {
@ -216,8 +217,6 @@ export default (props: any) => {
videoRef.current?.play(data[0].deviceCode);
}
}, 4000);
// }
// })
}
}
})
@ -233,12 +232,24 @@ export default (props: any) => {
}
//获取告警-回看数据
const getBackList = (type: string) => {
getLookBackList({ reserveId: monitorId, type }).then(res => {
getLookBackList({ reserveId: monitorId, type, pageNo: 1, pageSize: type == "3" ? 1 : 5 }).then(res => {
if (res?.code == 200) {
const data = res?.data.records;
if (type == "2") {//2-人数预警
setBackNumberList(data);
} else if (type == "3") {//3-陌生人预警
data.length > 0 && setBackStrangerList(data[0].details.slice(0, 5));
}
}
})
}
//获取陌生人告警-全部告警
const getAllStrangerList = () => {
getAllStranger({ reserveId: monitorId }).then(res => {
if (res?.code == 200) {
const data = res?.data;
if (data && data.length > 0) {
setStrangerList(data);
setBackStrangerList(data);
}
}
@ -293,6 +304,7 @@ export default (props: any) => {
getRoomData();
getWarnInfo();
getExpertList();
if (roleCode == "ebtp-site-supervision" || roleCode == "ebtp-after-supervision") { getAllStrangerList(); }
}, [])
//定时器
useEffect(() => {
@ -301,6 +313,7 @@ export default (props: any) => {
interval = setInterval(function () {
getWarnInfo();
getExpertList();
if (roleCode == "ebtp-site-supervision" || roleCode == "ebtp-after-supervision") { getAllStrangerList(); }
}, _time);
}
return () => {
@ -350,7 +363,7 @@ export default (props: any) => {
<div className="top-title-global">
<div className="top-title-left"></div>
<div className="top-title-center"><span>{basicInfo?.areaName}</span></div>
<div className="top-title-right"><div className={basicInfo?.status == "1" ? "ing-status" : "end-status"}>{bidStatusMap[basicInfo?.status]}</div></div>
<div className="top-title-right">{basicInfo?.status && <div className={basicInfo?.status == "1" ? "ing-status" : "end-status"}>{bidStatusMap[basicInfo?.status]}</div>}</div>
</div>
<div><a className="top-back" onClick={() => previousClick()}></a></div>
</Col>
@ -365,12 +378,16 @@ export default (props: any) => {
<Row>
<Col span={6}></Col>
<Col span={18}>
<div className="answer-supplier">
<span>{basicInfo?.supplierLength}</span>
<Tooltip placement="topLeft" title={<>{basicInfo?.sectionPayerList?.map((item: any) => <p key={item.sectionName}>{item.sectionName}{item.payerNumber}{item.payerNames.join("、")}</p>)}</>} visible={visible} color="rgba(4,20,47,0.85)" overlayInnerStyle={{ width: '250%' }} overlayClassName="screen-tag">
<span>{basicInfo?.sectionPayerList?.[0]?.payerNames.slice(0, 5).join("、")}<a onMouseEnter={() => setVisible(true)} onMouseLeave={() => setVisible(false)}></a></span>
</Tooltip>
</div>
{basicInfo?.status == "2" ? (
<div className="answer-supplier">
<span>{basicInfo?.supplierLength}</span>
<Tooltip placement="topLeft" title={<>{basicInfo?.sectionPayerList?.map((item: any, index: any) => <p key={index}>{item.sectionName}{item.payerNumber}{item.payerNames.join("、")}</p>)}</>} visible={visible} color="rgba(4,20,47,0.85)" overlayInnerStyle={{ width: '250%' }} overlayClassName="screen-tag">
<span>{basicInfo?.sectionPayerList?.[0]?.sectionName}{basicInfo?.sectionPayerList?.[0]?.payerNumber}<a onMouseEnter={() => setVisible(true)} onMouseLeave={() => setVisible(false)}></a></span>
</Tooltip>
</div>
) : (
<div style={{ height: "40px" }}></div>
)}
</Col>
{/* <Col span={6}></Col> */}
</Row>
@ -381,7 +398,7 @@ export default (props: any) => {
<div className="left-monitor-content">
<div className="left-menu">
<div className="left-menu-content">
{caremaList.map(item => <div className={cameraSelect == item.id ? "left-menu-btn left-menu-btn-select" : "left-menu-btn"} onClick={() => onCaremaPlay(item)} key={item.id}>{item.deviceName}</div>)}
{caremaList.map((item, index) => <div className={cameraSelect == item.id ? "left-menu-btn left-menu-btn-select" : "left-menu-btn"} onClick={() => onCaremaPlay(item)} key={index}>{item.deviceName}</div>)}
</div>
</div>
<div className="right-content-c">
@ -400,17 +417,17 @@ export default (props: any) => {
{btnSelect == "0" ? (
<div className="stranger-list">
{basicInfo?.status == "2"
? backStrangerList.slice(0, 5).map((item: any, index: any) => (
? backStrangerList.map((item: any, index: any) => (
<div className="stranger-list-card" key={index}>
<div>
<p><span></span>{item.createDate}</p>
<p><span></span>{item.eventTime}</p>
</div>
<div>
<Image src={pictureDisplayPath + "?filePath=" + item.details[0].filePath} preview={{ getContainer: "null" }} height={"100%"} onClick={() => drawerClick(item.details[0].filePath)} />
<Image src={pictureDisplayPath + "?filePath=" + item.filePath} preview={{ getContainer: "null" }} height={"100%"} onClick={() => drawerClick(item.filePath)} />
</div>
</div>
))
: earlyWarnData?.strangerDetails?.map((item: any, index: any) => (
: strangerList.map((item: any, index: any) => (
<div className="stranger-list-card" key={index}>
<div>
<p><span></span>{item.eventTime}</p>

View File

@ -57,3 +57,15 @@ export async function getLookBackList(params: any) {
// method: 'GET',
// });
// }
/**
* 陌生人预警-查询全部
* @param params
* @returns
*/
export async function getAllStranger(params: any) {
return request('/api/biz-service-ebtp-evaluation/v1/eval/room/alarm/screamOfAlarm/strangerImg', {
method: 'GET',
params: params
});
}

View File

@ -259,23 +259,52 @@
text-align: center;
.stranger-list {
height: calc(100% - 76px);
// height: calc(100% - 76px);
height: calc(100% - 36px);
overflow-y: auto;
overflow-x: hidden;
margin-top: 4px;
.stranger-list-card {
// border: 1px solid #2B5093;
// background-color: #051666;
border-bottom: 1px solid #5c6aa2;
height: 20%;
margin-top: 8px;
// margin-top: 8px;
padding: 8px;
color: #99f6ff;
display: flex;
justify-content: space-between;
text-align: left;
&>div>p>span {
color: #fff;
}
}
/*设置宽度,轨道颜色*/
&::-webkit-scrollbar {
width: 6px;
height: 6px;
// padding-right: 3px;
}
/*滚动条*/
&::-webkit-scrollbar-thumb {
background: #b9bfd7;
border-radius: 10px;
}
/*增加悬停样式*/
&::-webkit-scrollbar-thumb:hover {
background: #dcdfeb;
}
/*滚动轨道样式*/
&::-webkit-scrollbar-track-piece {
background: #505e9a;
border-radius: 3px;
}
}
.ant-drawer-close {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff