运维服务中台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

231 lines
8.6 KiB

import React, { useEffect, useState, useRef } from 'react';
import { connect } from 'react-redux';
import ReactECharts from 'echarts-for-react';
import echarts from 'echarts';
import { Spin, Card, RadioGroup, Radio, Form, Button } from '@douyinfe/semi-ui';
import TableShow from './tableShow';
import TreeShow from './treeShow';
const Network = ({
dispatch, actions, user, clientHeight, networkWeb,
projectPoms, pepProjectId, organizationsStruc
}) => {
const { analysis } = actions
const [show, setShow] = useState('tree')
const [projectList, setProjectList] = useState([]) //项目列表
const [projectValue, setProjectValue] = useState() //选中的项目
const [thingId, setThingId] = useState() //结构物thingId
const [spinning, setSpinning] = useState(true)
const form = useRef();//表单
useEffect(() => {
setSpinning(true)
let projectData = []
let project = projectPoms.filter(v => v.pepProjectIsDelete != 1)
if (projectPoms?.length) {
if (pepProjectId) {
if (pepProjectId?.length) {
let projectId = pepProjectId + ',-1'
projectData = project?.filter(d => projectId?.includes(d.id?.toString()))
} else {
projectData = project?.filter(d => d.id == pepProjectId)
}
} else {
projectData = [...project]
}
}
setProjectList(projectData?.map(d => ({ value: d.id, label: d.name || d.pepProjectName })))
setProjectValue(projectData[0]?.id)
form.current.setValue('projectId', projectData[0]?.id)
}, [projectPoms, pepProjectId])
useEffect(() => {
//获取当前选中项目的结构物列表
if (projectValue) dispatch(analysis.getOrganizationsStruc(projectValue))
}, [projectValue])
useEffect(() => {
//获取当前选中项目的结构物列表
if (organizationsStruc?.length) {
setThingId(organizationsStruc[0]?.thingId)
form.current.setValue('thingId', organizationsStruc[0]?.thingId)
} else {
setThingId("")
form.current.setValue('thingId', "")
}
}, [organizationsStruc])
useEffect(() => {
// 获取iframe元素
const iframe = document.getElementById('myIframe');
if (iframe) {
// 监听iframe的load事件
iframe.addEventListener('load', function () {
console.log('IFrame is loaded');
setSpinning(false)
// 在这里可以执行一些处理,表示iframe加载完毕
});
}
}, [])
return (
<>
<div style={{ background: '#FFFFFF', margin: '8px 12px', padding: '20px 20px 0px 20px', height: clientHeight - 72, display: 'flex', flexDirection: 'column' }}>
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
<div style={{ display: 'flex', alignItems: 'center' }}>
<div style={{ width: 0, height: 20, borderLeft: '3px solid #005ABD', borderTop: '3px solid transparent', borderBottom: '3px solid transparent' }}></div>
<div style={{ fontFamily: "YouSheBiaoTiHei", fontSize: 24, color: '#101531', marginLeft: 8 }}>一图统揽</div>
<div style={{ marginLeft: 6, fontSize: 12, color: '#969799', fontFamily: "DINExp", }}>PICTURE CENTRALIZE</div>
</div>
</div>
<div style={{ marginRight: 20, display: 'flex', alignItems: 'center' }} >
<Form
getFormApi={(formApi) => (form.current = formApi)}
layout="horizontal"
style={{ position: "relative", width: "100%", flex: 1, display: 'flex', margin: "16px 0" }}
>
<Form.Select
filter
// showClear
label='项目选择'
field="projectId"
labelPosition="left"
placeholder="请选择项目选择"
style={{ width: 200, marginRight: 10, }}
// value={projectValue}
optionList={projectList || []}
onSelect={v => {
if (projectValue != v) {
setProjectValue(v)
setSpinning(true)
form.current.setValue('projectId', v)
}
}}
/>
<Form.Select
label='结构物选择:'
labelPosition="left"
field='thingId'
style={{ width: 200, }}
placeholder="请选择结构物选择"
filter
// showClear
optionList={organizationsStruc?.map(d => ({ value: d.thingId, label: d.strucName })) || []}
onSelect={v => {
if (thingId != v) {
setSpinning(true)
setThingId(v)
form.current.setValue('thingId', v)
}
}}
/>
</Form>
</div>
<Spin
childStyle={{ width: "100%", height: clientHeight - 188 }}
spinning={spinning}>
<div id='show' style={{ width: "100%", height: "100%" }}>
<iframe
id="myIframe"
style={{
width: '100%',
height: '100%',
zIndex: 7, border: 0
}}
src={`${networkWeb}/network?key=${user?.token}&strucData=${JSON.stringify(organizationsStruc?.find(v => v.thingId == thingId) || {})}`}
allowFullScreen
>
<p>你的浏览器不支持 iframe </p>
</iframe>
</div>
</Spin>
{/* <div id='show' style={{ width: "100%", height: "calc(100% - 106px)" }}>
<div style={{
display: "flex", alignItems: 'center', justifyContent: "space-between",
borderBottom: '1px solid rgb(184 176 176 / 60%)', padding: 10
}}>
<div>设备总数: 222 个; 异常设备:0 个; 正常设备:222 个</div>
<RadioGroup type='button' buttonSize='large' defaultValue={"tree"} name="demo-radio-small"
onChange={e => {
setShow(e.target?.value)
}}
>
<Radio value={"tree"}>树状展示</Radio>
<Radio value={"table"}>表格展示</Radio>
</RadioGroup>
<div>
<Button
theme="solid"
type="primary"
style={{
width: 80,
height: 32,
borderRadius: 2,
background: '#FFFFFF',
color: '#005ABD',
border: '1px solid #005ABD'
}}
onClick={() => {
}}
>
</Button>
<Button
theme="solid"
type="primary"
style={{
width: 80,
height: 32,
borderRadius: 2,
marginRight: 32,
background: '#FFFFFF',
color: '#005ABD',
border: '1px solid #005ABD'
}}
onClick={() => { setShow() }}
>
表格展示
</Button>
</div>
</div>
{show == 'tree' && <TreeShow thingId={thingId} />}
{show == 'table' && <TableShow thingId={thingId} project={projectValue} />
}
</div > */}
</div >
</>
)
}
function mapStateToProps (state) {
const { auth, global, ProjectPoms, organizationsStruc } = state;
return {
user: auth.user,
actions: global.actions,
clientHeight: global.clientHeight,
projectPoms: ProjectPoms?.data?.rows || [],
pepProjectId: global.pepProjectId,
organizationsStruc: organizationsStruc?.data || [], //结构物选择列表
networkWeb: global.networkWeb,
};
}
export default connect(mapStateToProps)(Network);