9.28 1、异常告警优化 2、大屏,评审中项目,供应商名称加密 3、评委会设置,评标室预约优化
This commit is contained in:
@ -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}>
|
||||
|
@ -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 ({
|
||||
|
@ -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 () => {
|
||||
|
@ -826,6 +826,10 @@ export default () => {
|
||||
className="screen-table"
|
||||
rowKey="id"
|
||||
size="small"
|
||||
scroll={{
|
||||
y: 200,
|
||||
scrollToFirstRowOnChange: true,
|
||||
}}
|
||||
dataSource={bidProjectData}
|
||||
columns={evalColumn}
|
||||
onRow={record => {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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>
|
||||
|
@ -56,4 +56,16 @@ export async function getLookBackList(params: any) {
|
||||
// return request('/api/biz-service-ebtp-evaluation/v1/eval/room/reserve/' + id, {
|
||||
// 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
|
||||
});
|
||||
}
|
@ -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
Reference in New Issue
Block a user