3 changed files with 261 additions and 1 deletions
@ -0,0 +1,215 @@ |
|||
|
|||
import { connect } from 'react-redux'; |
|||
import './protable.less' |
|||
import { Card, Button, Popconfirm, Badge,Col, Row } from 'antd'; |
|||
import ProTable from '@ant-design/pro-table'; |
|||
// import { Badge, Button } from 'antd';
|
|||
import React, { useEffect, useState } from 'react'; |
|||
// @ts-ignore
|
|||
import styles from './protable.less'; |
|||
const DetailList = (props) => { |
|||
const { ip } = props; |
|||
const [tableListDataSource, setTableListDataSource] = useState([]); |
|||
|
|||
const columns= [ |
|||
{ |
|||
title: '视频', |
|||
key: 'createdAt', |
|||
dataIndex: 'createdAt', |
|||
valueType: 'dateTime', |
|||
render: (dom, record) => { |
|||
return <Row> |
|||
<Col span={8}></Col> |
|||
<Col span={8}>col-8</Col> |
|||
<Col span={8}>col-8</Col> |
|||
</Row> |
|||
}, |
|||
}, |
|||
]; |
|||
useEffect(() => { |
|||
const source = []; |
|||
for (let i = 0; i < 15; i += 1) { |
|||
source.push({ |
|||
createdAt: Date.now() - Math.floor(Math.random() * 10000), |
|||
code: `const getData = async params => {
|
|||
const data = await getData(params); |
|||
return { list: data.data, ...data }; |
|||
};`,
|
|||
key: i, |
|||
}); |
|||
} |
|||
setTableListDataSource(source); |
|||
}, [ip]); |
|||
return ( |
|||
<ProTable |
|||
columns={columns} |
|||
dataSource={tableListDataSource} |
|||
pagination={{ |
|||
pageSize: 3, |
|||
showSizeChanger: false, |
|||
}} |
|||
rowKey="key" |
|||
toolBarRender={false} |
|||
search={false} |
|||
/> |
|||
); |
|||
}; |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
const ipListDataSource= []; |
|||
|
|||
for (let i = 0; i < 10; i += 1) { |
|||
ipListDataSource.push({ |
|||
ip: `106.14.98.1${i}4`, |
|||
cpu: 10, |
|||
mem: 20, |
|||
status: [Math.floor(Math.random() * 10) % 4], |
|||
disk: 30, |
|||
}); |
|||
} |
|||
|
|||
|
|||
|
|||
const IPList = (props) => { |
|||
const { onChange, ip } = props; |
|||
|
|||
const columns= [ |
|||
{ |
|||
title: '路段名称', |
|||
key: 'ip', |
|||
dataIndex: 'ip', |
|||
render: (_, item) => { |
|||
console.log(item.ip) |
|||
return <Badge status={item.status} text={item.ip} />; |
|||
}, |
|||
}, |
|||
|
|||
]; |
|||
return ( |
|||
<div className='spilce'> |
|||
<ProTable |
|||
columns={columns} |
|||
request={(params, sorter, filter) => { |
|||
// 表单搜索项会从 params 传入,传递给后端接口。
|
|||
console.log(params, sorter, filter); |
|||
return Promise.resolve({ |
|||
data: ipListDataSource, |
|||
success: true, |
|||
}); |
|||
}} |
|||
rowKey="ip" |
|||
rowClassName={(record) => { |
|||
return record.ip === ip ? styles['split-row-select-active'] : ''; |
|||
}} |
|||
toolbar={{ |
|||
search: { |
|||
onSearch: (value) => { |
|||
alert(value); |
|||
}, |
|||
}, |
|||
}} |
|||
options={false} |
|||
pagination={false} |
|||
search={false} |
|||
onRow={(record) => { |
|||
return { |
|||
onClick: () => { |
|||
if (record.ip) { |
|||
onChange(record.ip); |
|||
} |
|||
}, |
|||
}; |
|||
}} |
|||
/></div> |
|||
|
|||
); |
|||
}; |
|||
|
|||
|
|||
|
|||
const videoTable = () => { |
|||
const [ip, setIp] = useState('0.0.0.0'); |
|||
const tabList = [ |
|||
{ |
|||
key: 'tab1', |
|||
tab: '公交', |
|||
}, |
|||
{ |
|||
key: 'tab2', |
|||
tab: '路段', |
|||
}, |
|||
]; |
|||
const contentList= { |
|||
tab1: [<div className='card-protable'> |
|||
<Card > |
|||
<IPList onChange={(cIp) => setIp(cIp)} ip={ip} /> |
|||
</Card> |
|||
<Card style={{flex:1}}> |
|||
<DetailList ip={ip} /> |
|||
</Card> |
|||
</div>], |
|||
tab2: [<div className='card-protable'> |
|||
<Card > |
|||
<IPList onChange={(cIp) => setIp(cIp)} ip={ip} /> |
|||
</Card> |
|||
<Card style={{flex:1}}> |
|||
|
|||
<DetailList ip={ip} /> |
|||
</Card> |
|||
</div>] |
|||
}; |
|||
const [activeTabKey1, setActiveTabKey1] = useState('tab1'); |
|||
const [activeTabKey2, setActiveTabKey2] = useState('app'); |
|||
const onTab1Change = (key) => { |
|||
setActiveTabKey1(key); |
|||
}; |
|||
|
|||
const onTab2Change = (key) => { |
|||
setActiveTabKey2(key); |
|||
}; |
|||
return ( |
|||
<> |
|||
<Card |
|||
style={{ |
|||
width: '100%', |
|||
}} |
|||
tabList={tabList} |
|||
activeTabKey={activeTabKey1} |
|||
onTabChange={(key) => { |
|||
onTab1Change(key); |
|||
}} |
|||
> |
|||
{contentList[activeTabKey1]} |
|||
</Card> |
|||
|
|||
</> |
|||
|
|||
); |
|||
}; |
|||
|
|||
function mapStateToProps(state) { |
|||
const { auth, depMessage } = state; |
|||
const pakData = (dep) => { |
|||
return dep.map((d) => { |
|||
return { |
|||
title: d.name, |
|||
value: d.id, |
|||
// children: d.type >= 2 ? [] : pakData(d.subordinate)
|
|||
children: pakData(d.subordinate) |
|||
} |
|||
}) |
|||
} |
|||
let depData = pakData(depMessage.data || []) |
|||
return { |
|||
user: auth.user, |
|||
depMessage: depMessage.data || [], |
|||
depLoading: depMessage.isRequesting, |
|||
depData, |
|||
}; |
|||
} |
|||
export default connect(mapStateToProps)(videoTable); |
@ -0,0 +1,42 @@ |
|||
import React, { useEffect, useState } from 'react'; |
|||
import { connect } from 'react-redux'; |
|||
import '../style.less'; |
|||
import { getDepMessage, getReportStatistic } from "../actions/infor" |
|||
import VideoTable from '../components/videoTable'; |
|||
const superagent = require('superagent'); |
|||
const Videois = (props) => { |
|||
const { dispatch, user } = props |
|||
const [data, setData] = useState() |
|||
useEffect(() => { |
|||
// dispatch(getDepMessage())
|
|||
dispatch(getReportStatistic()) |
|||
setData(props) |
|||
}, []); |
|||
//批量导出
|
|||
const exports = (ids, counts) => { |
|||
// console.log(user);
|
|||
let reportIds = []; |
|||
if (ids.length) |
|||
reportIds = ids |
|||
else |
|||
reportIds = (counts || {}).ids || []; |
|||
superagent.post('/_report/http') |
|||
.send({ id: reportIds.map(i => Number(i)) }).end((err, res) => { |
|||
const resTextIs = res.text.split('/').pop() |
|||
window.open( |
|||
'/_api/' + |
|||
`attachments?src=files/${resTextIs}&filename=${encodeURIComponent(resTextIs)}&token=${user.token}`) |
|||
}) |
|||
} |
|||
return ( |
|||
<> <VideoTable data={data} exports={exports} /> |
|||
</> |
|||
) |
|||
} |
|||
function mapStateToProps(state) { |
|||
const { auth } = state |
|||
return { |
|||
user: auth.user, |
|||
} |
|||
} |
|||
export default connect(mapStateToProps)(Videois); |
Loading…
Reference in new issue